├── .checkov.yaml ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── ci.yml │ ├── codeql-analysis.yml │ ├── pr.yml │ ├── release.yml │ └── stale.yml ├── .gitignore ├── .goreleaser.yml ├── .idea ├── .gitignore ├── .name ├── golinter.xml ├── modules.xml ├── sato.iml └── vcs.xml ├── .markdownlint.json ├── .pre-commit-config.yaml ├── .run └── test sato parse.run.xml ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── SECURITY.md ├── bump.ps1 ├── bump.sh ├── entrypoint.sh ├── examples ├── ami-factory.yaml ├── arm │ ├── microsoft.compute │ │ └── vm-simple-windows │ │ │ ├── README.md │ │ │ ├── azuredeploy.json │ │ │ ├── azuredeploy.parameters.json │ │ │ ├── azuredeploymin.json │ │ │ ├── createUiDefinition.json │ │ │ ├── main.bicep │ │ │ └── metadata.json │ ├── smallest.json │ └── smallest.yaml ├── athena.yaml ├── aws-vpc.template-variables.yaml ├── aws-vpc.template.yaml ├── kinesis.yaml ├── linux-bastion-master.template.yaml ├── template.yaml └── workload-yaml-entrypoint-new-vpc.template.yaml ├── go.mod ├── go.sum ├── main.go ├── schema ├── README.md ├── alexa-ask-skill.json ├── aws-accessanalyzer-analyzer.json ├── aws-acmpca-certificate.json ├── aws-acmpca-certificateauthority.json ├── aws-acmpca-certificateauthorityactivation.json ├── aws-acmpca-permission.json ├── aws-amazonmq-broker.json ├── aws-amazonmq-configuration.json ├── aws-amazonmq-configurationassociation.json ├── aws-amplify-app.json ├── aws-amplify-branch.json ├── aws-amplify-domain.json ├── aws-amplifyuibuilder-component.json ├── aws-amplifyuibuilder-form.json ├── aws-amplifyuibuilder-theme.json ├── aws-apigateway-account.json ├── aws-apigateway-apikey.json ├── aws-apigateway-authorizer.json ├── aws-apigateway-basepathmapping.json ├── aws-apigateway-basepathmappingv2.json ├── aws-apigateway-clientcertificate.json ├── aws-apigateway-deployment.json ├── aws-apigateway-documentationpart.json ├── aws-apigateway-documentationversion.json ├── aws-apigateway-domainname.json ├── aws-apigateway-domainnameaccessassociation.json ├── aws-apigateway-domainnamev2.json ├── aws-apigateway-gatewayresponse.json ├── aws-apigateway-method.json ├── aws-apigateway-model.json ├── aws-apigateway-requestvalidator.json ├── aws-apigateway-resource.json ├── aws-apigateway-restapi.json ├── aws-apigateway-stage.json ├── aws-apigateway-usageplan.json ├── aws-apigateway-usageplankey.json ├── aws-apigateway-vpclink.json ├── aws-apigatewayv2-api.json ├── aws-apigatewayv2-apigatewaymanagedoverrides.json ├── aws-apigatewayv2-apimapping.json ├── aws-apigatewayv2-authorizer.json ├── aws-apigatewayv2-deployment.json ├── aws-apigatewayv2-domainname.json ├── aws-apigatewayv2-integration.json ├── aws-apigatewayv2-integrationresponse.json ├── aws-apigatewayv2-model.json ├── aws-apigatewayv2-route.json ├── aws-apigatewayv2-routeresponse.json ├── aws-apigatewayv2-stage.json ├── aws-apigatewayv2-vpclink.json ├── aws-appconfig-application.json ├── aws-appconfig-configurationprofile.json ├── aws-appconfig-deployment.json ├── aws-appconfig-deploymentstrategy.json ├── aws-appconfig-environment.json ├── aws-appconfig-extension.json ├── aws-appconfig-extensionassociation.json ├── aws-appconfig-hostedconfigurationversion.json ├── aws-appflow-connector.json ├── aws-appflow-connectorprofile.json ├── aws-appflow-flow.json ├── aws-appintegrations-application.json ├── aws-appintegrations-dataintegration.json ├── aws-appintegrations-eventintegration.json ├── aws-applicationautoscaling-scalabletarget.json ├── aws-applicationautoscaling-scalingpolicy.json ├── aws-applicationinsights-application.json ├── aws-applicationsignals-discovery.json ├── aws-applicationsignals-servicelevelobjective.json ├── aws-appmesh-gatewayroute.json ├── aws-appmesh-mesh.json ├── aws-appmesh-route.json ├── aws-appmesh-virtualgateway.json ├── aws-appmesh-virtualnode.json ├── aws-appmesh-virtualrouter.json ├── aws-appmesh-virtualservice.json ├── aws-apprunner-autoscalingconfiguration.json ├── aws-apprunner-observabilityconfiguration.json ├── aws-apprunner-service.json ├── aws-apprunner-vpcconnector.json ├── aws-apprunner-vpcingressconnection.json ├── aws-appstream-appblock.json ├── aws-appstream-appblockbuilder.json ├── aws-appstream-application.json ├── aws-appstream-applicationentitlementassociation.json ├── aws-appstream-applicationfleetassociation.json ├── aws-appstream-directoryconfig.json ├── aws-appstream-entitlement.json ├── aws-appstream-fleet.json ├── aws-appstream-imagebuilder.json ├── aws-appstream-stack.json ├── aws-appstream-stackfleetassociation.json ├── aws-appstream-stackuserassociation.json ├── aws-appstream-user.json ├── aws-appsync-api.json ├── aws-appsync-apicache.json ├── aws-appsync-apikey.json ├── aws-appsync-channelnamespace.json ├── aws-appsync-datasource.json ├── aws-appsync-domainname.json ├── aws-appsync-domainnameapiassociation.json ├── aws-appsync-functionconfiguration.json ├── aws-appsync-graphqlapi.json ├── aws-appsync-graphqlschema.json ├── aws-appsync-resolver.json ├── aws-appsync-sourceapiassociation.json ├── aws-apptest-testcase.json ├── aws-aps-rulegroupsnamespace.json ├── aws-aps-scraper.json ├── aws-aps-workspace.json ├── aws-arczonalshift-autoshiftobservernotificationstatus.json ├── aws-arczonalshift-zonalautoshiftconfiguration.json ├── aws-athena-capacityreservation.json ├── aws-athena-datacatalog.json ├── aws-athena-namedquery.json ├── aws-athena-preparedstatement.json ├── aws-athena-workgroup.json ├── aws-auditmanager-assessment.json ├── aws-autoscaling-autoscalinggroup.json ├── aws-autoscaling-launchconfiguration.json ├── aws-autoscaling-lifecyclehook.json ├── aws-autoscaling-scalingpolicy.json ├── aws-autoscaling-scheduledaction.json ├── aws-autoscaling-warmpool.json ├── aws-autoscalingplans-scalingplan.json ├── aws-b2bi-capability.json ├── aws-b2bi-partnership.json ├── aws-b2bi-profile.json ├── aws-b2bi-transformer.json ├── aws-backup-backupplan.json ├── aws-backup-backupselection.json ├── aws-backup-backupvault.json ├── aws-backup-framework.json ├── aws-backup-logicallyairgappedbackupvault.json ├── aws-backup-reportplan.json ├── aws-backup-restoretestingplan.json ├── aws-backup-restoretestingselection.json ├── aws-backupgateway-hypervisor.json ├── aws-batch-computeenvironment.json ├── aws-batch-consumableresource.json ├── aws-batch-jobdefinition.json ├── aws-batch-jobqueue.json ├── aws-batch-schedulingpolicy.json ├── aws-bcmdataexports-export.json ├── aws-bedrock-agent.json ├── aws-bedrock-agentalias.json ├── aws-bedrock-applicationinferenceprofile.json ├── aws-bedrock-blueprint.json ├── aws-bedrock-dataautomationproject.json ├── aws-bedrock-datasource.json ├── aws-bedrock-flow.json ├── aws-bedrock-flowalias.json ├── aws-bedrock-flowversion.json ├── aws-bedrock-guardrail.json ├── aws-bedrock-guardrailversion.json ├── aws-bedrock-knowledgebase.json ├── aws-bedrock-prompt.json ├── aws-bedrock-promptversion.json ├── aws-billingconductor-billinggroup.json ├── aws-billingconductor-customlineitem.json ├── aws-billingconductor-pricingplan.json ├── aws-billingconductor-pricingrule.json ├── aws-budgets-budget.json ├── aws-budgets-budgetsaction.json ├── aws-cassandra-keyspace.json ├── aws-cassandra-table.json ├── aws-cassandra-type.json ├── aws-ce-anomalymonitor.json ├── aws-ce-anomalysubscription.json ├── aws-ce-costcategory.json ├── aws-certificatemanager-account.json ├── aws-certificatemanager-certificate.json ├── aws-chatbot-customaction.json ├── aws-chatbot-microsoftteamschannelconfiguration.json ├── aws-chatbot-slackchannelconfiguration.json ├── aws-cleanrooms-analysistemplate.json ├── aws-cleanrooms-collaboration.json ├── aws-cleanrooms-configuredtable.json ├── aws-cleanrooms-configuredtableassociation.json ├── aws-cleanrooms-idmappingtable.json ├── aws-cleanrooms-idnamespaceassociation.json ├── aws-cleanrooms-membership.json ├── aws-cleanrooms-privacybudgettemplate.json ├── aws-cleanroomsml-trainingdataset.json ├── aws-cloud9-environmentec2.json ├── aws-cloudformation-customresource.json ├── aws-cloudformation-guardhook.json ├── aws-cloudformation-hookdefaultversion.json ├── aws-cloudformation-hooktypeconfig.json ├── aws-cloudformation-hookversion.json ├── aws-cloudformation-lambdahook.json ├── aws-cloudformation-macro.json ├── aws-cloudformation-moduledefaultversion.json ├── aws-cloudformation-moduleversion.json ├── aws-cloudformation-publictypeversion.json ├── aws-cloudformation-publisher.json ├── aws-cloudformation-resourcedefaultversion.json ├── aws-cloudformation-resourceversion.json ├── aws-cloudformation-stack.json ├── aws-cloudformation-stackset.json ├── aws-cloudformation-typeactivation.json ├── aws-cloudformation-waitcondition.json ├── aws-cloudformation-waitconditionhandle.json ├── aws-cloudfront-anycastiplist.json ├── aws-cloudfront-cachepolicy.json ├── aws-cloudfront-cloudfrontoriginaccessidentity.json ├── aws-cloudfront-connectiongroup.json ├── aws-cloudfront-continuousdeploymentpolicy.json ├── aws-cloudfront-distribution.json ├── aws-cloudfront-distributiontenant.json ├── aws-cloudfront-function.json ├── aws-cloudfront-keygroup.json ├── aws-cloudfront-keyvaluestore.json ├── aws-cloudfront-monitoringsubscription.json ├── aws-cloudfront-originaccesscontrol.json ├── aws-cloudfront-originrequestpolicy.json ├── aws-cloudfront-publickey.json ├── aws-cloudfront-realtimelogconfig.json ├── aws-cloudfront-responseheaderspolicy.json ├── aws-cloudfront-streamingdistribution.json ├── aws-cloudfront-vpcorigin.json ├── aws-cloudtrail-channel.json ├── aws-cloudtrail-dashboard.json ├── aws-cloudtrail-eventdatastore.json ├── aws-cloudtrail-resourcepolicy.json ├── aws-cloudtrail-trail.json ├── aws-cloudwatch-alarm.json ├── aws-cloudwatch-anomalydetector.json ├── aws-cloudwatch-compositealarm.json ├── aws-cloudwatch-dashboard.json ├── aws-cloudwatch-insightrule.json ├── aws-cloudwatch-metricstream.json ├── aws-codeartifact-domain.json ├── aws-codeartifact-packagegroup.json ├── aws-codeartifact-repository.json ├── aws-codebuild-fleet.json ├── aws-codebuild-project.json ├── aws-codebuild-reportgroup.json ├── aws-codebuild-sourcecredential.json ├── aws-codecommit-repository.json ├── aws-codeconnections-connection.json ├── aws-codedeploy-application.json ├── aws-codedeploy-deploymentconfig.json ├── aws-codedeploy-deploymentgroup.json ├── aws-codeguruprofiler-profilinggroup.json ├── aws-codegurureviewer-repositoryassociation.json ├── aws-codepipeline-customactiontype.json ├── aws-codepipeline-pipeline.json ├── aws-codepipeline-webhook.json ├── aws-codestar-githubrepository.json ├── aws-codestarconnections-connection.json ├── aws-codestarconnections-repositorylink.json ├── aws-codestarconnections-syncconfiguration.json ├── aws-codestarnotifications-notificationrule.json ├── aws-cognito-identitypool.json ├── aws-cognito-identitypoolprincipaltag.json ├── aws-cognito-identitypoolroleattachment.json ├── aws-cognito-logdeliveryconfiguration.json ├── aws-cognito-managedloginbranding.json ├── aws-cognito-userpool.json ├── aws-cognito-userpoolclient.json ├── aws-cognito-userpooldomain.json ├── aws-cognito-userpoolgroup.json ├── aws-cognito-userpoolidentityprovider.json ├── aws-cognito-userpoolresourceserver.json ├── aws-cognito-userpoolriskconfigurationattachment.json ├── aws-cognito-userpooluicustomizationattachment.json ├── aws-cognito-userpooluser.json ├── aws-cognito-userpoolusertogroupattachment.json ├── aws-comprehend-documentclassifier.json ├── aws-comprehend-flywheel.json ├── aws-config-aggregationauthorization.json ├── aws-config-configrule.json ├── aws-config-configurationaggregator.json ├── aws-config-configurationrecorder.json ├── aws-config-conformancepack.json ├── aws-config-deliverychannel.json ├── aws-config-organizationconfigrule.json ├── aws-config-organizationconformancepack.json ├── aws-config-remediationconfiguration.json ├── aws-config-storedquery.json ├── aws-connect-agentstatus.json ├── aws-connect-approvedorigin.json ├── aws-connect-contactflow.json ├── aws-connect-contactflowmodule.json ├── aws-connect-contactflowversion.json ├── aws-connect-emailaddress.json ├── aws-connect-evaluationform.json ├── aws-connect-hoursofoperation.json ├── aws-connect-instance.json ├── aws-connect-instancestorageconfig.json ├── aws-connect-integrationassociation.json ├── aws-connect-phonenumber.json ├── aws-connect-predefinedattribute.json ├── aws-connect-prompt.json ├── aws-connect-queue.json ├── aws-connect-quickconnect.json ├── aws-connect-routingprofile.json ├── aws-connect-rule.json ├── aws-connect-securitykey.json ├── aws-connect-securityprofile.json ├── aws-connect-tasktemplate.json ├── aws-connect-trafficdistributiongroup.json ├── aws-connect-user.json ├── aws-connect-userhierarchygroup.json ├── aws-connect-userhierarchystructure.json ├── aws-connect-view.json ├── aws-connect-viewversion.json ├── aws-connectcampaigns-campaign.json ├── aws-connectcampaignsv2-campaign.json ├── aws-controltower-enabledbaseline.json ├── aws-controltower-enabledcontrol.json ├── aws-controltower-landingzone.json ├── aws-cur-reportdefinition.json ├── aws-customerprofiles-calculatedattributedefinition.json ├── aws-customerprofiles-domain.json ├── aws-customerprofiles-eventstream.json ├── aws-customerprofiles-eventtrigger.json ├── aws-customerprofiles-integration.json ├── aws-customerprofiles-objecttype.json ├── aws-customerprofiles-segmentdefinition.json ├── aws-databrew-dataset.json ├── aws-databrew-job.json ├── aws-databrew-project.json ├── aws-databrew-recipe.json ├── aws-databrew-ruleset.json ├── aws-databrew-schedule.json ├── aws-datapipeline-pipeline.json ├── aws-datasync-agent.json ├── aws-datasync-locationazureblob.json ├── aws-datasync-locationefs.json ├── aws-datasync-locationfsxlustre.json ├── aws-datasync-locationfsxontap.json ├── aws-datasync-locationfsxopenzfs.json ├── aws-datasync-locationfsxwindows.json ├── aws-datasync-locationhdfs.json ├── aws-datasync-locationnfs.json ├── aws-datasync-locationobjectstorage.json ├── aws-datasync-locations3.json ├── aws-datasync-locationsmb.json ├── aws-datasync-storagesystem.json ├── aws-datasync-task.json ├── aws-datazone-connection.json ├── aws-datazone-datasource.json ├── aws-datazone-domain.json ├── aws-datazone-environment.json ├── aws-datazone-environmentactions.json ├── aws-datazone-environmentblueprintconfiguration.json ├── aws-datazone-environmentprofile.json ├── aws-datazone-groupprofile.json ├── aws-datazone-project.json ├── aws-datazone-projectmembership.json ├── aws-datazone-subscriptiontarget.json ├── aws-datazone-userprofile.json ├── aws-dax-cluster.json ├── aws-dax-parametergroup.json ├── aws-dax-subnetgroup.json ├── aws-deadline-farm.json ├── aws-deadline-fleet.json ├── aws-deadline-licenseendpoint.json ├── aws-deadline-limit.json ├── aws-deadline-meteredproduct.json ├── aws-deadline-monitor.json ├── aws-deadline-queue.json ├── aws-deadline-queueenvironment.json ├── aws-deadline-queuefleetassociation.json ├── aws-deadline-queuelimitassociation.json ├── aws-deadline-storageprofile.json ├── aws-detective-graph.json ├── aws-detective-memberinvitation.json ├── aws-detective-organizationadmin.json ├── aws-devopsguru-loganomalydetectionintegration.json ├── aws-devopsguru-notificationchannel.json ├── aws-devopsguru-resourcecollection.json ├── aws-directoryservice-microsoftad.json ├── aws-directoryservice-simplead.json ├── aws-dlm-lifecyclepolicy.json ├── aws-dms-certificate.json ├── aws-dms-datamigration.json ├── aws-dms-dataprovider.json ├── aws-dms-endpoint.json ├── aws-dms-eventsubscription.json ├── aws-dms-instanceprofile.json ├── aws-dms-migrationproject.json ├── aws-dms-replicationconfig.json ├── aws-dms-replicationinstance.json ├── aws-dms-replicationsubnetgroup.json ├── aws-dms-replicationtask.json ├── aws-docdb-dbcluster.json ├── aws-docdb-dbclusterparametergroup.json ├── aws-docdb-dbinstance.json ├── aws-docdb-dbsubnetgroup.json ├── aws-docdb-eventsubscription.json ├── aws-docdbelastic-cluster.json ├── aws-dsql-cluster.json ├── aws-dynamodb-globaltable.json ├── aws-dynamodb-table.json ├── aws-ec2-capacityreservation.json ├── aws-ec2-capacityreservationfleet.json ├── aws-ec2-carriergateway.json ├── aws-ec2-clientvpnauthorizationrule.json ├── aws-ec2-clientvpnendpoint.json ├── aws-ec2-clientvpnroute.json ├── aws-ec2-clientvpntargetnetworkassociation.json ├── aws-ec2-customergateway.json ├── aws-ec2-dhcpoptions.json ├── aws-ec2-ec2fleet.json ├── aws-ec2-egressonlyinternetgateway.json ├── aws-ec2-eip.json ├── aws-ec2-eipassociation.json ├── aws-ec2-enclavecertificateiamroleassociation.json ├── aws-ec2-flowlog.json ├── aws-ec2-gatewayroutetableassociation.json ├── aws-ec2-host.json ├── aws-ec2-instance.json ├── aws-ec2-instanceconnectendpoint.json ├── aws-ec2-internetgateway.json ├── aws-ec2-ipam.json ├── aws-ec2-ipamallocation.json ├── aws-ec2-ipampool.json ├── aws-ec2-ipampoolcidr.json ├── aws-ec2-ipamresourcediscovery.json ├── aws-ec2-ipamresourcediscoveryassociation.json ├── aws-ec2-ipamscope.json ├── aws-ec2-keypair.json ├── aws-ec2-launchtemplate.json ├── aws-ec2-localgatewayroute.json ├── aws-ec2-localgatewayroutetable.json ├── aws-ec2-localgatewayroutetablevirtualinterfacegroupassociation.json ├── aws-ec2-localgatewayroutetablevpcassociation.json ├── aws-ec2-natgateway.json ├── aws-ec2-networkacl.json ├── aws-ec2-networkaclentry.json ├── aws-ec2-networkinsightsaccessscope.json ├── aws-ec2-networkinsightsaccessscopeanalysis.json ├── aws-ec2-networkinsightsanalysis.json ├── aws-ec2-networkinsightspath.json ├── aws-ec2-networkinterface.json ├── aws-ec2-networkinterfaceattachment.json ├── aws-ec2-networkinterfacepermission.json ├── aws-ec2-networkperformancemetricsubscription.json ├── aws-ec2-placementgroup.json ├── aws-ec2-prefixlist.json ├── aws-ec2-route.json ├── aws-ec2-routeserver.json ├── aws-ec2-routeserverassociation.json ├── aws-ec2-routeserverendpoint.json ├── aws-ec2-routeserverpeer.json ├── aws-ec2-routeserverpropagation.json ├── aws-ec2-routetable.json ├── aws-ec2-securitygroup.json ├── aws-ec2-securitygroupegress.json ├── aws-ec2-securitygroupingress.json ├── aws-ec2-securitygroupvpcassociation.json ├── aws-ec2-snapshotblockpublicaccess.json ├── aws-ec2-spotfleet.json ├── aws-ec2-subnet.json ├── aws-ec2-subnetcidrblock.json ├── aws-ec2-subnetnetworkaclassociation.json ├── aws-ec2-subnetroutetableassociation.json ├── aws-ec2-trafficmirrorfilter.json ├── aws-ec2-trafficmirrorfilterrule.json ├── aws-ec2-trafficmirrorsession.json ├── aws-ec2-trafficmirrortarget.json ├── aws-ec2-transitgateway.json ├── aws-ec2-transitgatewayattachment.json ├── aws-ec2-transitgatewayconnect.json ├── aws-ec2-transitgatewaymulticastdomain.json ├── aws-ec2-transitgatewaymulticastdomainassociation.json ├── aws-ec2-transitgatewaymulticastgroupmember.json ├── aws-ec2-transitgatewaymulticastgroupsource.json ├── aws-ec2-transitgatewaypeeringattachment.json ├── aws-ec2-transitgatewayroute.json ├── aws-ec2-transitgatewayroutetable.json ├── aws-ec2-transitgatewayroutetableassociation.json ├── aws-ec2-transitgatewayroutetablepropagation.json ├── aws-ec2-transitgatewayvpcattachment.json ├── aws-ec2-verifiedaccessendpoint.json ├── aws-ec2-verifiedaccessgroup.json ├── aws-ec2-verifiedaccessinstance.json ├── aws-ec2-verifiedaccesstrustprovider.json ├── aws-ec2-volume.json ├── aws-ec2-volumeattachment.json ├── aws-ec2-vpc.json ├── aws-ec2-vpcblockpublicaccessexclusion.json ├── aws-ec2-vpcblockpublicaccessoptions.json ├── aws-ec2-vpccidrblock.json ├── aws-ec2-vpcdhcpoptionsassociation.json ├── aws-ec2-vpcendpoint.json ├── aws-ec2-vpcendpointconnectionnotification.json ├── aws-ec2-vpcendpointservice.json ├── aws-ec2-vpcendpointservicepermissions.json ├── aws-ec2-vpcgatewayattachment.json ├── aws-ec2-vpcpeeringconnection.json ├── aws-ec2-vpnconnection.json ├── aws-ec2-vpnconnectionroute.json ├── aws-ec2-vpngateway.json ├── aws-ec2-vpngatewayroutepropagation.json ├── aws-ecr-publicrepository.json ├── aws-ecr-pullthroughcacherule.json ├── aws-ecr-registrypolicy.json ├── aws-ecr-registryscanningconfiguration.json ├── aws-ecr-replicationconfiguration.json ├── aws-ecr-repository.json ├── aws-ecr-repositorycreationtemplate.json ├── aws-ecs-capacityprovider.json ├── aws-ecs-cluster.json ├── aws-ecs-clustercapacityproviderassociations.json ├── aws-ecs-primarytaskset.json ├── aws-ecs-service.json ├── aws-ecs-taskdefinition.json ├── aws-ecs-taskset.json ├── aws-efs-accesspoint.json ├── aws-efs-filesystem.json ├── aws-efs-mounttarget.json ├── aws-eks-accessentry.json ├── aws-eks-addon.json ├── aws-eks-cluster.json ├── aws-eks-fargateprofile.json ├── aws-eks-identityproviderconfig.json ├── aws-eks-nodegroup.json ├── aws-eks-podidentityassociation.json ├── aws-elasticache-cachecluster.json ├── aws-elasticache-globalreplicationgroup.json ├── aws-elasticache-parametergroup.json ├── aws-elasticache-replicationgroup.json ├── aws-elasticache-securitygroup.json ├── aws-elasticache-securitygroupingress.json ├── aws-elasticache-serverlesscache.json ├── aws-elasticache-subnetgroup.json ├── aws-elasticache-user.json ├── aws-elasticache-usergroup.json ├── aws-elasticbeanstalk-application.json ├── aws-elasticbeanstalk-applicationversion.json ├── aws-elasticbeanstalk-configurationtemplate.json ├── aws-elasticbeanstalk-environment.json ├── aws-elasticloadbalancing-loadbalancer.json ├── aws-elasticloadbalancingv2-listener.json ├── aws-elasticloadbalancingv2-listenercertificate.json ├── aws-elasticloadbalancingv2-listenerrule.json ├── aws-elasticloadbalancingv2-loadbalancer.json ├── aws-elasticloadbalancingv2-targetgroup.json ├── aws-elasticloadbalancingv2-truststore.json ├── aws-elasticloadbalancingv2-truststorerevocation.json ├── aws-elasticsearch-domain.json ├── aws-emr-cluster.json ├── aws-emr-instancefleetconfig.json ├── aws-emr-instancegroupconfig.json ├── aws-emr-securityconfiguration.json ├── aws-emr-step.json ├── aws-emr-studio.json ├── aws-emr-studiosessionmapping.json ├── aws-emr-walworkspace.json ├── aws-emrcontainers-virtualcluster.json ├── aws-emrserverless-application.json ├── aws-entityresolution-idmappingworkflow.json ├── aws-entityresolution-idnamespace.json ├── aws-entityresolution-matchingworkflow.json ├── aws-entityresolution-policystatement.json ├── aws-entityresolution-schemamapping.json ├── aws-events-apidestination.json ├── aws-events-archive.json ├── aws-events-connection.json ├── aws-events-endpoint.json ├── aws-events-eventbus.json ├── aws-events-eventbuspolicy.json ├── aws-events-rule.json ├── aws-eventschemas-discoverer.json ├── aws-eventschemas-registry.json ├── aws-eventschemas-registrypolicy.json ├── aws-eventschemas-schema.json ├── aws-evidently-experiment.json ├── aws-evidently-feature.json ├── aws-evidently-launch.json ├── aws-evidently-project.json ├── aws-evidently-segment.json ├── aws-finspace-environment.json ├── aws-fis-experimenttemplate.json ├── aws-fis-targetaccountconfiguration.json ├── aws-fms-notificationchannel.json ├── aws-fms-policy.json ├── aws-fms-resourceset.json ├── aws-forecast-dataset.json ├── aws-forecast-datasetgroup.json ├── aws-frauddetector-detector.json ├── aws-frauddetector-entitytype.json ├── aws-frauddetector-eventtype.json ├── aws-frauddetector-label.json ├── aws-frauddetector-list.json ├── aws-frauddetector-outcome.json ├── aws-frauddetector-variable.json ├── aws-fsx-datarepositoryassociation.json ├── aws-fsx-filesystem.json ├── aws-fsx-snapshot.json ├── aws-fsx-storagevirtualmachine.json ├── aws-fsx-volume.json ├── aws-gamelift-alias.json ├── aws-gamelift-build.json ├── aws-gamelift-containerfleet.json ├── aws-gamelift-containergroupdefinition.json ├── aws-gamelift-fleet.json ├── aws-gamelift-gameservergroup.json ├── aws-gamelift-gamesessionqueue.json ├── aws-gamelift-location.json ├── aws-gamelift-matchmakingconfiguration.json ├── aws-gamelift-matchmakingruleset.json ├── aws-gamelift-script.json ├── aws-globalaccelerator-accelerator.json ├── aws-globalaccelerator-crossaccountattachment.json ├── aws-globalaccelerator-endpointgroup.json ├── aws-globalaccelerator-listener.json ├── aws-glue-classifier.json ├── aws-glue-connection.json ├── aws-glue-crawler.json ├── aws-glue-customentitytype.json ├── aws-glue-database.json ├── aws-glue-datacatalogencryptionsettings.json ├── aws-glue-dataqualityruleset.json ├── aws-glue-devendpoint.json ├── aws-glue-job.json ├── aws-glue-mltransform.json ├── aws-glue-partition.json ├── aws-glue-registry.json ├── aws-glue-schema.json ├── aws-glue-schemaversion.json ├── aws-glue-schemaversionmetadata.json ├── aws-glue-securityconfiguration.json ├── aws-glue-table.json ├── aws-glue-tableoptimizer.json ├── aws-glue-trigger.json ├── aws-glue-usageprofile.json ├── aws-glue-workflow.json ├── aws-grafana-workspace.json ├── aws-greengrass-connectordefinition.json ├── aws-greengrass-connectordefinitionversion.json ├── aws-greengrass-coredefinition.json ├── aws-greengrass-coredefinitionversion.json ├── aws-greengrass-devicedefinition.json ├── aws-greengrass-devicedefinitionversion.json ├── aws-greengrass-functiondefinition.json ├── aws-greengrass-functiondefinitionversion.json ├── aws-greengrass-group.json ├── aws-greengrass-groupversion.json ├── aws-greengrass-loggerdefinition.json ├── aws-greengrass-loggerdefinitionversion.json ├── aws-greengrass-resourcedefinition.json ├── aws-greengrass-resourcedefinitionversion.json ├── aws-greengrass-subscriptiondefinition.json ├── aws-greengrass-subscriptiondefinitionversion.json ├── aws-greengrassv2-componentversion.json ├── aws-greengrassv2-deployment.json ├── aws-groundstation-config.json ├── aws-groundstation-dataflowendpointgroup.json ├── aws-groundstation-missionprofile.json ├── aws-guardduty-detector.json ├── aws-guardduty-filter.json ├── aws-guardduty-ipset.json ├── aws-guardduty-malwareprotectionplan.json ├── aws-guardduty-master.json ├── aws-guardduty-member.json ├── aws-guardduty-publishingdestination.json ├── aws-guardduty-threatintelset.json ├── aws-healthimaging-datastore.json ├── aws-healthlake-fhirdatastore.json ├── aws-iam-accesskey.json ├── aws-iam-group.json ├── aws-iam-grouppolicy.json ├── aws-iam-instanceprofile.json ├── aws-iam-managedpolicy.json ├── aws-iam-oidcprovider.json ├── aws-iam-policy.json ├── aws-iam-role.json ├── aws-iam-rolepolicy.json ├── aws-iam-samlprovider.json ├── aws-iam-servercertificate.json ├── aws-iam-servicelinkedrole.json ├── aws-iam-user.json ├── aws-iam-userpolicy.json ├── aws-iam-usertogroupaddition.json ├── aws-iam-virtualmfadevice.json ├── aws-identitystore-group.json ├── aws-identitystore-groupmembership.json ├── aws-imagebuilder-component.json ├── aws-imagebuilder-containerrecipe.json ├── aws-imagebuilder-distributionconfiguration.json ├── aws-imagebuilder-image.json ├── aws-imagebuilder-imagepipeline.json ├── aws-imagebuilder-imagerecipe.json ├── aws-imagebuilder-infrastructureconfiguration.json ├── aws-imagebuilder-lifecyclepolicy.json ├── aws-imagebuilder-workflow.json ├── aws-inspector-assessmenttarget.json ├── aws-inspector-assessmenttemplate.json ├── aws-inspector-resourcegroup.json ├── aws-inspectorv2-cisscanconfiguration.json ├── aws-inspectorv2-filter.json ├── aws-internetmonitor-monitor.json ├── aws-invoicing-invoiceunit.json ├── aws-iot-accountauditconfiguration.json ├── aws-iot-authorizer.json ├── aws-iot-billinggroup.json ├── aws-iot-cacertificate.json ├── aws-iot-certificate.json ├── aws-iot-certificateprovider.json ├── aws-iot-command.json ├── aws-iot-custommetric.json ├── aws-iot-dimension.json ├── aws-iot-domainconfiguration.json ├── aws-iot-fleetmetric.json ├── aws-iot-jobtemplate.json ├── aws-iot-logging.json ├── aws-iot-mitigationaction.json ├── aws-iot-policy.json ├── aws-iot-policyprincipalattachment.json ├── aws-iot-provisioningtemplate.json ├── aws-iot-resourcespecificlogging.json ├── aws-iot-rolealias.json ├── aws-iot-scheduledaudit.json ├── aws-iot-securityprofile.json ├── aws-iot-softwarepackage.json ├── aws-iot-softwarepackageversion.json ├── aws-iot-thing.json ├── aws-iot-thinggroup.json ├── aws-iot-thingprincipalattachment.json ├── aws-iot-thingtype.json ├── aws-iot-topicrule.json ├── aws-iot-topicruledestination.json ├── aws-iotanalytics-channel.json ├── aws-iotanalytics-dataset.json ├── aws-iotanalytics-datastore.json ├── aws-iotanalytics-pipeline.json ├── aws-iotcoredeviceadvisor-suitedefinition.json ├── aws-iotevents-alarmmodel.json ├── aws-iotevents-detectormodel.json ├── aws-iotevents-input.json ├── aws-iotfleethub-application.json ├── aws-iotfleetwise-campaign.json ├── aws-iotfleetwise-decodermanifest.json ├── aws-iotfleetwise-fleet.json ├── aws-iotfleetwise-modelmanifest.json ├── aws-iotfleetwise-signalcatalog.json ├── aws-iotfleetwise-statetemplate.json ├── aws-iotfleetwise-vehicle.json ├── aws-iotsitewise-accesspolicy.json ├── aws-iotsitewise-asset.json ├── aws-iotsitewise-assetmodel.json ├── aws-iotsitewise-dashboard.json ├── aws-iotsitewise-dataset.json ├── aws-iotsitewise-gateway.json ├── aws-iotsitewise-portal.json ├── aws-iotsitewise-project.json ├── aws-iotthingsgraph-flowtemplate.json ├── aws-iottwinmaker-componenttype.json ├── aws-iottwinmaker-entity.json ├── aws-iottwinmaker-scene.json ├── aws-iottwinmaker-syncjob.json ├── aws-iottwinmaker-workspace.json ├── aws-iotwireless-destination.json ├── aws-iotwireless-deviceprofile.json ├── aws-iotwireless-fuotatask.json ├── aws-iotwireless-multicastgroup.json ├── aws-iotwireless-networkanalyzerconfiguration.json ├── aws-iotwireless-partneraccount.json ├── aws-iotwireless-serviceprofile.json ├── aws-iotwireless-taskdefinition.json ├── aws-iotwireless-wirelessdevice.json ├── aws-iotwireless-wirelessdeviceimporttask.json ├── aws-iotwireless-wirelessgateway.json ├── aws-ivs-channel.json ├── aws-ivs-encoderconfiguration.json ├── aws-ivs-ingestconfiguration.json ├── aws-ivs-playbackkeypair.json ├── aws-ivs-playbackrestrictionpolicy.json ├── aws-ivs-publickey.json ├── aws-ivs-recordingconfiguration.json ├── aws-ivs-stage.json ├── aws-ivs-storageconfiguration.json ├── aws-ivs-streamkey.json ├── aws-ivschat-loggingconfiguration.json ├── aws-ivschat-room.json ├── aws-kafkaconnect-connector.json ├── aws-kafkaconnect-customplugin.json ├── aws-kafkaconnect-workerconfiguration.json ├── aws-kendra-datasource.json ├── aws-kendra-faq.json ├── aws-kendra-index.json ├── aws-kendraranking-executionplan.json ├── aws-kinesis-resourcepolicy.json ├── aws-kinesis-stream.json ├── aws-kinesis-streamconsumer.json ├── aws-kinesisanalytics-application.json ├── aws-kinesisanalytics-applicationoutput.json ├── aws-kinesisanalytics-applicationreferencedatasource.json ├── aws-kinesisanalyticsv2-application.json ├── aws-kinesisanalyticsv2-applicationcloudwatchloggingoption.json ├── aws-kinesisanalyticsv2-applicationoutput.json ├── aws-kinesisanalyticsv2-applicationreferencedatasource.json ├── aws-kinesisfirehose-deliverystream.json ├── aws-kinesisvideo-signalingchannel.json ├── aws-kinesisvideo-stream.json ├── aws-kms-alias.json ├── aws-kms-key.json ├── aws-kms-replicakey.json ├── aws-lakeformation-datacellsfilter.json ├── aws-lakeformation-datalakesettings.json ├── aws-lakeformation-permissions.json ├── aws-lakeformation-principalpermissions.json ├── aws-lakeformation-resource.json ├── aws-lakeformation-tag.json ├── aws-lakeformation-tagassociation.json ├── aws-lambda-alias.json ├── aws-lambda-codesigningconfig.json ├── aws-lambda-eventinvokeconfig.json ├── aws-lambda-eventsourcemapping.json ├── aws-lambda-function.json ├── aws-lambda-layerversion.json ├── aws-lambda-layerversionpermission.json ├── aws-lambda-permission.json ├── aws-lambda-url.json ├── aws-lambda-version.json ├── aws-launchwizard-deployment.json ├── aws-lex-bot.json ├── aws-lex-botalias.json ├── aws-lex-botversion.json ├── aws-lex-resourcepolicy.json ├── aws-licensemanager-grant.json ├── aws-licensemanager-license.json ├── aws-lightsail-alarm.json ├── aws-lightsail-bucket.json ├── aws-lightsail-certificate.json ├── aws-lightsail-container.json ├── aws-lightsail-database.json ├── aws-lightsail-disk.json ├── aws-lightsail-distribution.json ├── aws-lightsail-instance.json ├── aws-lightsail-loadbalancer.json ├── aws-lightsail-loadbalancertlscertificate.json ├── aws-lightsail-staticip.json ├── aws-location-apikey.json ├── aws-location-geofencecollection.json ├── aws-location-map.json ├── aws-location-placeindex.json ├── aws-location-routecalculator.json ├── aws-location-tracker.json ├── aws-location-trackerconsumer.json ├── aws-logs-accountpolicy.json ├── aws-logs-delivery.json ├── aws-logs-deliverydestination.json ├── aws-logs-deliverysource.json ├── aws-logs-destination.json ├── aws-logs-integration.json ├── aws-logs-loganomalydetector.json ├── aws-logs-loggroup.json ├── aws-logs-logstream.json ├── aws-logs-metricfilter.json ├── aws-logs-querydefinition.json ├── aws-logs-resourcepolicy.json ├── aws-logs-subscriptionfilter.json ├── aws-logs-transformer.json ├── aws-lookoutequipment-inferencescheduler.json ├── aws-lookoutmetrics-alert.json ├── aws-lookoutmetrics-anomalydetector.json ├── aws-lookoutvision-project.json ├── aws-m2-application.json ├── aws-m2-deployment.json ├── aws-m2-environment.json ├── aws-macie-allowlist.json ├── aws-macie-customdataidentifier.json ├── aws-macie-findingsfilter.json ├── aws-macie-session.json ├── aws-managedblockchain-accessor.json ├── aws-managedblockchain-member.json ├── aws-managedblockchain-node.json ├── aws-mediaconnect-bridge.json ├── aws-mediaconnect-bridgeoutput.json ├── aws-mediaconnect-bridgesource.json ├── aws-mediaconnect-flow.json ├── aws-mediaconnect-flowentitlement.json ├── aws-mediaconnect-flowoutput.json ├── aws-mediaconnect-flowsource.json ├── aws-mediaconnect-flowvpcinterface.json ├── aws-mediaconnect-gateway.json ├── aws-mediaconvert-jobtemplate.json ├── aws-mediaconvert-preset.json ├── aws-mediaconvert-queue.json ├── aws-medialive-channel.json ├── aws-medialive-channelplacementgroup.json ├── aws-medialive-cloudwatchalarmtemplate.json ├── aws-medialive-cloudwatchalarmtemplategroup.json ├── aws-medialive-cluster.json ├── aws-medialive-eventbridgeruletemplate.json ├── aws-medialive-eventbridgeruletemplategroup.json ├── aws-medialive-input.json ├── aws-medialive-inputsecuritygroup.json ├── aws-medialive-multiplex.json ├── aws-medialive-multiplexprogram.json ├── aws-medialive-network.json ├── aws-medialive-sdisource.json ├── aws-medialive-signalmap.json ├── aws-mediapackage-asset.json ├── aws-mediapackage-channel.json ├── aws-mediapackage-originendpoint.json ├── aws-mediapackage-packagingconfiguration.json ├── aws-mediapackage-packaginggroup.json ├── aws-mediapackagev2-channel.json ├── aws-mediapackagev2-channelgroup.json ├── aws-mediapackagev2-channelpolicy.json ├── aws-mediapackagev2-originendpoint.json ├── aws-mediapackagev2-originendpointpolicy.json ├── aws-mediastore-container.json ├── aws-mediatailor-channel.json ├── aws-mediatailor-channelpolicy.json ├── aws-mediatailor-livesource.json ├── aws-mediatailor-playbackconfiguration.json ├── aws-mediatailor-sourcelocation.json ├── aws-mediatailor-vodsource.json ├── aws-memorydb-acl.json ├── aws-memorydb-cluster.json ├── aws-memorydb-multiregioncluster.json ├── aws-memorydb-parametergroup.json ├── aws-memorydb-subnetgroup.json ├── aws-memorydb-user.json ├── aws-msk-batchscramsecret.json ├── aws-msk-cluster.json ├── aws-msk-clusterpolicy.json ├── aws-msk-configuration.json ├── aws-msk-replicator.json ├── aws-msk-serverlesscluster.json ├── aws-msk-vpcconnection.json ├── aws-mwaa-environment.json ├── aws-neptune-dbcluster.json ├── aws-neptune-dbclusterparametergroup.json ├── aws-neptune-dbinstance.json ├── aws-neptune-dbparametergroup.json ├── aws-neptune-dbsubnetgroup.json ├── aws-neptune-eventsubscription.json ├── aws-neptunegraph-graph.json ├── aws-neptunegraph-privategraphendpoint.json ├── aws-networkfirewall-firewall.json ├── aws-networkfirewall-firewallpolicy.json ├── aws-networkfirewall-loggingconfiguration.json ├── aws-networkfirewall-rulegroup.json ├── aws-networkfirewall-tlsinspectionconfiguration.json ├── aws-networkmanager-connectattachment.json ├── aws-networkmanager-connectpeer.json ├── aws-networkmanager-corenetwork.json ├── aws-networkmanager-customergatewayassociation.json ├── aws-networkmanager-device.json ├── aws-networkmanager-directconnectgatewayattachment.json ├── aws-networkmanager-globalnetwork.json ├── aws-networkmanager-link.json ├── aws-networkmanager-linkassociation.json ├── aws-networkmanager-site.json ├── aws-networkmanager-sitetositevpnattachment.json ├── aws-networkmanager-transitgatewaypeering.json ├── aws-networkmanager-transitgatewayregistration.json ├── aws-networkmanager-transitgatewayroutetableattachment.json ├── aws-networkmanager-vpcattachment.json ├── aws-notifications-channelassociation.json ├── aws-notifications-eventrule.json ├── aws-notifications-managednotificationaccountcontactassociation.json ├── aws-notifications-managednotificationadditionalchannelassociation.json ├── aws-notifications-notificationconfiguration.json ├── aws-notifications-notificationhub.json ├── aws-notificationscontacts-emailcontact.json ├── aws-oam-link.json ├── aws-oam-sink.json ├── aws-omics-annotationstore.json ├── aws-omics-referencestore.json ├── aws-omics-rungroup.json ├── aws-omics-sequencestore.json ├── aws-omics-variantstore.json ├── aws-omics-workflow.json ├── aws-opensearchserverless-accesspolicy.json ├── aws-opensearchserverless-collection.json ├── aws-opensearchserverless-index.json ├── aws-opensearchserverless-lifecyclepolicy.json ├── aws-opensearchserverless-securityconfig.json ├── aws-opensearchserverless-securitypolicy.json ├── aws-opensearchserverless-vpcendpoint.json ├── aws-opensearchservice-application.json ├── aws-opensearchservice-domain.json ├── aws-opsworks-app.json ├── aws-opsworks-elasticloadbalancerattachment.json ├── aws-opsworks-instance.json ├── aws-opsworks-layer.json ├── aws-opsworks-stack.json ├── aws-opsworks-userprofile.json ├── aws-opsworks-volume.json ├── aws-opsworkscm-server.json ├── aws-organizations-account.json ├── aws-organizations-organization.json ├── aws-organizations-organizationalunit.json ├── aws-organizations-policy.json ├── aws-organizations-resourcepolicy.json ├── aws-osis-pipeline.json ├── aws-panorama-applicationinstance.json ├── aws-panorama-package.json ├── aws-panorama-packageversion.json ├── aws-paymentcryptography-alias.json ├── aws-paymentcryptography-key.json ├── aws-pcaconnectorad-connector.json ├── aws-pcaconnectorad-directoryregistration.json ├── aws-pcaconnectorad-serviceprincipalname.json ├── aws-pcaconnectorad-template.json ├── aws-pcaconnectorad-templategroupaccesscontrolentry.json ├── aws-pcaconnectorscep-challenge.json ├── aws-pcaconnectorscep-connector.json ├── aws-pcs-cluster.json ├── aws-pcs-computenodegroup.json ├── aws-pcs-queue.json ├── aws-personalize-dataset.json ├── aws-personalize-datasetgroup.json ├── aws-personalize-schema.json ├── aws-personalize-solution.json ├── aws-pinpoint-admchannel.json ├── aws-pinpoint-apnschannel.json ├── aws-pinpoint-apnssandboxchannel.json ├── aws-pinpoint-apnsvoipchannel.json ├── aws-pinpoint-apnsvoipsandboxchannel.json ├── aws-pinpoint-app.json ├── aws-pinpoint-applicationsettings.json ├── aws-pinpoint-baiduchannel.json ├── aws-pinpoint-campaign.json ├── aws-pinpoint-emailchannel.json ├── aws-pinpoint-emailtemplate.json ├── aws-pinpoint-eventstream.json ├── aws-pinpoint-gcmchannel.json ├── aws-pinpoint-inapptemplate.json ├── aws-pinpoint-pushtemplate.json ├── aws-pinpoint-segment.json ├── aws-pinpoint-smschannel.json ├── aws-pinpoint-smstemplate.json ├── aws-pinpoint-voicechannel.json ├── aws-pinpointemail-configurationset.json ├── aws-pinpointemail-configurationseteventdestination.json ├── aws-pinpointemail-dedicatedippool.json ├── aws-pinpointemail-identity.json ├── aws-pipes-pipe.json ├── aws-proton-environmentaccountconnection.json ├── aws-proton-environmenttemplate.json ├── aws-proton-servicetemplate.json ├── aws-qbusiness-application.json ├── aws-qbusiness-dataaccessor.json ├── aws-qbusiness-datasource.json ├── aws-qbusiness-index.json ├── aws-qbusiness-permission.json ├── aws-qbusiness-plugin.json ├── aws-qbusiness-retriever.json ├── aws-qbusiness-webexperience.json ├── aws-qldb-ledger.json ├── aws-qldb-stream.json ├── aws-quicksight-analysis.json ├── aws-quicksight-custompermissions.json ├── aws-quicksight-dashboard.json ├── aws-quicksight-dataset.json ├── aws-quicksight-datasource.json ├── aws-quicksight-folder.json ├── aws-quicksight-refreshschedule.json ├── aws-quicksight-template.json ├── aws-quicksight-theme.json ├── aws-quicksight-topic.json ├── aws-quicksight-vpcconnection.json ├── aws-ram-permission.json ├── aws-ram-resourceshare.json ├── aws-rbin-rule.json ├── aws-rds-customdbengineversion.json ├── aws-rds-dbcluster.json ├── aws-rds-dbclusterparametergroup.json ├── aws-rds-dbinstance.json ├── aws-rds-dbparametergroup.json ├── aws-rds-dbproxy.json ├── aws-rds-dbproxyendpoint.json ├── aws-rds-dbproxytargetgroup.json ├── aws-rds-dbsecuritygroup.json ├── aws-rds-dbsecuritygroupingress.json ├── aws-rds-dbshardgroup.json ├── aws-rds-dbsubnetgroup.json ├── aws-rds-eventsubscription.json ├── aws-rds-globalcluster.json ├── aws-rds-integration.json ├── aws-rds-optiongroup.json ├── aws-redshift-cluster.json ├── aws-redshift-clusterparametergroup.json ├── aws-redshift-clustersecuritygroup.json ├── aws-redshift-clustersecuritygroupingress.json ├── aws-redshift-clustersubnetgroup.json ├── aws-redshift-endpointaccess.json ├── aws-redshift-endpointauthorization.json ├── aws-redshift-eventsubscription.json ├── aws-redshift-integration.json ├── aws-redshift-scheduledaction.json ├── aws-redshiftserverless-namespace.json ├── aws-redshiftserverless-workgroup.json ├── aws-refactorspaces-application.json ├── aws-refactorspaces-environment.json ├── aws-refactorspaces-route.json ├── aws-refactorspaces-service.json ├── aws-rekognition-collection.json ├── aws-rekognition-project.json ├── aws-rekognition-streamprocessor.json ├── aws-resiliencehub-app.json ├── aws-resiliencehub-resiliencypolicy.json ├── aws-resourceexplorer2-defaultviewassociation.json ├── aws-resourceexplorer2-index.json ├── aws-resourceexplorer2-view.json ├── aws-resourcegroups-group.json ├── aws-resourcegroups-tagsynctask.json ├── aws-robomaker-fleet.json ├── aws-robomaker-robot.json ├── aws-robomaker-robotapplication.json ├── aws-robomaker-robotapplicationversion.json ├── aws-robomaker-simulationapplication.json ├── aws-robomaker-simulationapplicationversion.json ├── aws-rolesanywhere-crl.json ├── aws-rolesanywhere-profile.json ├── aws-rolesanywhere-trustanchor.json ├── aws-route53-cidrcollection.json ├── aws-route53-dnssec.json ├── aws-route53-healthcheck.json ├── aws-route53-hostedzone.json ├── aws-route53-keysigningkey.json ├── aws-route53-recordset.json ├── aws-route53-recordsetgroup.json ├── aws-route53profiles-profile.json ├── aws-route53profiles-profileassociation.json ├── aws-route53profiles-profileresourceassociation.json ├── aws-route53recoverycontrol-cluster.json ├── aws-route53recoverycontrol-controlpanel.json ├── aws-route53recoverycontrol-routingcontrol.json ├── aws-route53recoverycontrol-safetyrule.json ├── aws-route53recoveryreadiness-cell.json ├── aws-route53recoveryreadiness-readinesscheck.json ├── aws-route53recoveryreadiness-recoverygroup.json ├── aws-route53recoveryreadiness-resourceset.json ├── aws-route53resolver-firewalldomainlist.json ├── aws-route53resolver-firewallrulegroup.json ├── aws-route53resolver-firewallrulegroupassociation.json ├── aws-route53resolver-outpostresolver.json ├── aws-route53resolver-resolverconfig.json ├── aws-route53resolver-resolverdnssecconfig.json ├── aws-route53resolver-resolverendpoint.json ├── aws-route53resolver-resolverqueryloggingconfig.json ├── aws-route53resolver-resolverqueryloggingconfigassociation.json ├── aws-route53resolver-resolverrule.json ├── aws-route53resolver-resolverruleassociation.json ├── aws-rum-appmonitor.json ├── aws-s3-accessgrant.json ├── aws-s3-accessgrantsinstance.json ├── aws-s3-accessgrantslocation.json ├── aws-s3-accesspoint.json ├── aws-s3-bucket.json ├── aws-s3-bucketpolicy.json ├── aws-s3-multiregionaccesspoint.json ├── aws-s3-multiregionaccesspointpolicy.json ├── aws-s3-storagelens.json ├── aws-s3-storagelensgroup.json ├── aws-s3express-bucketpolicy.json ├── aws-s3express-directorybucket.json ├── aws-s3objectlambda-accesspoint.json ├── aws-s3objectlambda-accesspointpolicy.json ├── aws-s3outposts-accesspoint.json ├── aws-s3outposts-bucket.json ├── aws-s3outposts-bucketpolicy.json ├── aws-s3outposts-endpoint.json ├── aws-s3tables-tablebucket.json ├── aws-s3tables-tablebucketpolicy.json ├── aws-sagemaker-app.json ├── aws-sagemaker-appimageconfig.json ├── aws-sagemaker-cluster.json ├── aws-sagemaker-coderepository.json ├── aws-sagemaker-dataqualityjobdefinition.json ├── aws-sagemaker-device.json ├── aws-sagemaker-devicefleet.json ├── aws-sagemaker-domain.json ├── aws-sagemaker-endpoint.json ├── aws-sagemaker-endpointconfig.json ├── aws-sagemaker-featuregroup.json ├── aws-sagemaker-image.json ├── aws-sagemaker-imageversion.json ├── aws-sagemaker-inferencecomponent.json ├── aws-sagemaker-inferenceexperiment.json ├── aws-sagemaker-mlflowtrackingserver.json ├── aws-sagemaker-model.json ├── aws-sagemaker-modelbiasjobdefinition.json ├── aws-sagemaker-modelcard.json ├── aws-sagemaker-modelexplainabilityjobdefinition.json ├── aws-sagemaker-modelpackage.json ├── aws-sagemaker-modelpackagegroup.json ├── aws-sagemaker-modelqualityjobdefinition.json ├── aws-sagemaker-monitoringschedule.json ├── aws-sagemaker-notebookinstance.json ├── aws-sagemaker-notebookinstancelifecycleconfig.json ├── aws-sagemaker-partnerapp.json ├── aws-sagemaker-pipeline.json ├── aws-sagemaker-project.json ├── aws-sagemaker-space.json ├── aws-sagemaker-studiolifecycleconfig.json ├── aws-sagemaker-userprofile.json ├── aws-sagemaker-workteam.json ├── aws-scheduler-schedule.json ├── aws-scheduler-schedulegroup.json ├── aws-sdb-domain.json ├── aws-secretsmanager-resourcepolicy.json ├── aws-secretsmanager-rotationschedule.json ├── aws-secretsmanager-secret.json ├── aws-secretsmanager-secrettargetattachment.json ├── aws-securityhub-automationrule.json ├── aws-securityhub-configurationpolicy.json ├── aws-securityhub-delegatedadmin.json ├── aws-securityhub-findingaggregator.json ├── aws-securityhub-hub.json ├── aws-securityhub-insight.json ├── aws-securityhub-organizationconfiguration.json ├── aws-securityhub-policyassociation.json ├── aws-securityhub-productsubscription.json ├── aws-securityhub-securitycontrol.json ├── aws-securityhub-standard.json ├── aws-securitylake-awslogsource.json ├── aws-securitylake-datalake.json ├── aws-securitylake-subscriber.json ├── aws-securitylake-subscribernotification.json ├── aws-servicecatalog-acceptedportfolioshare.json ├── aws-servicecatalog-cloudformationproduct.json ├── aws-servicecatalog-cloudformationprovisionedproduct.json ├── aws-servicecatalog-launchnotificationconstraint.json ├── aws-servicecatalog-launchroleconstraint.json ├── aws-servicecatalog-launchtemplateconstraint.json ├── aws-servicecatalog-portfolio.json ├── aws-servicecatalog-portfolioprincipalassociation.json ├── aws-servicecatalog-portfolioproductassociation.json ├── aws-servicecatalog-portfolioshare.json ├── aws-servicecatalog-resourceupdateconstraint.json ├── aws-servicecatalog-serviceaction.json ├── aws-servicecatalog-serviceactionassociation.json ├── aws-servicecatalog-stacksetconstraint.json ├── aws-servicecatalog-tagoption.json ├── aws-servicecatalog-tagoptionassociation.json ├── aws-servicecatalogappregistry-application.json ├── aws-servicecatalogappregistry-attributegroup.json ├── aws-servicecatalogappregistry-attributegroupassociation.json ├── aws-servicecatalogappregistry-resourceassociation.json ├── aws-servicediscovery-httpnamespace.json ├── aws-servicediscovery-instance.json ├── aws-servicediscovery-privatednsnamespace.json ├── aws-servicediscovery-publicdnsnamespace.json ├── aws-servicediscovery-service.json ├── aws-ses-configurationset.json ├── aws-ses-configurationseteventdestination.json ├── aws-ses-contactlist.json ├── aws-ses-dedicatedippool.json ├── aws-ses-emailidentity.json ├── aws-ses-mailmanageraddoninstance.json ├── aws-ses-mailmanageraddonsubscription.json ├── aws-ses-mailmanagerarchive.json ├── aws-ses-mailmanageringresspoint.json ├── aws-ses-mailmanagerrelay.json ├── aws-ses-mailmanagerruleset.json ├── aws-ses-mailmanagertrafficpolicy.json ├── aws-ses-receiptfilter.json ├── aws-ses-receiptrule.json ├── aws-ses-receiptruleset.json ├── aws-ses-template.json ├── aws-ses-vdmattributes.json ├── aws-shield-drtaccess.json ├── aws-shield-proactiveengagement.json ├── aws-shield-protection.json ├── aws-shield-protectiongroup.json ├── aws-signer-profilepermission.json ├── aws-signer-signingprofile.json ├── aws-simspaceweaver-simulation.json ├── aws-sns-subscription.json ├── aws-sns-topic.json ├── aws-sns-topicinlinepolicy.json ├── aws-sns-topicpolicy.json ├── aws-sqs-queue.json ├── aws-sqs-queueinlinepolicy.json ├── aws-sqs-queuepolicy.json ├── aws-ssm-association.json ├── aws-ssm-document.json ├── aws-ssm-maintenancewindow.json ├── aws-ssm-maintenancewindowtarget.json ├── aws-ssm-maintenancewindowtask.json ├── aws-ssm-parameter.json ├── aws-ssm-patchbaseline.json ├── aws-ssm-resourcedatasync.json ├── aws-ssm-resourcepolicy.json ├── aws-ssmcontacts-contact.json ├── aws-ssmcontacts-contactchannel.json ├── aws-ssmcontacts-plan.json ├── aws-ssmcontacts-rotation.json ├── aws-ssmincidents-replicationset.json ├── aws-ssmincidents-responseplan.json ├── aws-ssmquicksetup-configurationmanager.json ├── aws-sso-application.json ├── aws-sso-applicationassignment.json ├── aws-sso-assignment.json ├── aws-sso-instance.json ├── aws-sso-instanceaccesscontrolattributeconfiguration.json ├── aws-sso-permissionset.json ├── aws-stepfunctions-activity.json ├── aws-stepfunctions-statemachine.json ├── aws-stepfunctions-statemachinealias.json ├── aws-stepfunctions-statemachineversion.json ├── aws-supportapp-accountalias.json ├── aws-supportapp-slackchannelconfiguration.json ├── aws-supportapp-slackworkspaceconfiguration.json ├── aws-synthetics-canary.json ├── aws-synthetics-group.json ├── aws-systemsmanagersap-application.json ├── aws-timestream-database.json ├── aws-timestream-influxdbinstance.json ├── aws-timestream-scheduledquery.json ├── aws-timestream-table.json ├── aws-transfer-agreement.json ├── aws-transfer-certificate.json ├── aws-transfer-connector.json ├── aws-transfer-profile.json ├── aws-transfer-server.json ├── aws-transfer-user.json ├── aws-transfer-webapp.json ├── aws-transfer-workflow.json ├── aws-verifiedpermissions-identitysource.json ├── aws-verifiedpermissions-policy.json ├── aws-verifiedpermissions-policystore.json ├── aws-verifiedpermissions-policytemplate.json ├── aws-voiceid-domain.json ├── aws-vpclattice-accesslogsubscription.json ├── aws-vpclattice-authpolicy.json ├── aws-vpclattice-listener.json ├── aws-vpclattice-resourceconfiguration.json ├── aws-vpclattice-resourcegateway.json ├── aws-vpclattice-resourcepolicy.json ├── aws-vpclattice-rule.json ├── aws-vpclattice-service.json ├── aws-vpclattice-servicenetwork.json ├── aws-vpclattice-servicenetworkresourceassociation.json ├── aws-vpclattice-servicenetworkserviceassociation.json ├── aws-vpclattice-servicenetworkvpcassociation.json ├── aws-vpclattice-targetgroup.json ├── aws-waf-bytematchset.json ├── aws-waf-ipset.json ├── aws-waf-rule.json ├── aws-waf-sizeconstraintset.json ├── aws-waf-sqlinjectionmatchset.json ├── aws-waf-webacl.json ├── aws-waf-xssmatchset.json ├── aws-wafregional-bytematchset.json ├── aws-wafregional-geomatchset.json ├── aws-wafregional-ipset.json ├── aws-wafregional-ratebasedrule.json ├── aws-wafregional-regexpatternset.json ├── aws-wafregional-rule.json ├── aws-wafregional-sizeconstraintset.json ├── aws-wafregional-sqlinjectionmatchset.json ├── aws-wafregional-webacl.json ├── aws-wafregional-webaclassociation.json ├── aws-wafregional-xssmatchset.json ├── aws-wafv2-ipset.json ├── aws-wafv2-loggingconfiguration.json ├── aws-wafv2-regexpatternset.json ├── aws-wafv2-rulegroup.json ├── aws-wafv2-webacl.json ├── aws-wafv2-webaclassociation.json ├── aws-wisdom-aiagent.json ├── aws-wisdom-aiagentversion.json ├── aws-wisdom-aiguardrail.json ├── aws-wisdom-aiguardrailversion.json ├── aws-wisdom-aiprompt.json ├── aws-wisdom-aipromptversion.json ├── aws-wisdom-assistant.json ├── aws-wisdom-assistantassociation.json ├── aws-wisdom-knowledgebase.json ├── aws-wisdom-messagetemplate.json ├── aws-wisdom-messagetemplateversion.json ├── aws-workspaces-connectionalias.json ├── aws-workspaces-workspace.json ├── aws-workspaces-workspacespool.json ├── aws-workspacesthinclient-environment.json ├── aws-workspacesweb-browsersettings.json ├── aws-workspacesweb-dataprotectionsettings.json ├── aws-workspacesweb-identityprovider.json ├── aws-workspacesweb-ipaccesssettings.json ├── aws-workspacesweb-networksettings.json ├── aws-workspacesweb-portal.json ├── aws-workspacesweb-truststore.json ├── aws-workspacesweb-useraccessloggingsettings.json ├── aws-workspacesweb-usersettings.json ├── aws-xray-group.json ├── aws-xray-resourcepolicy.json ├── aws-xray-samplingrule.json ├── aws-xray-transactionsearchconfig.json ├── update.ps1 └── update.sh ├── set-version.sh ├── src ├── arm │ ├── data.go │ ├── data.template │ ├── data_test.go │ ├── error.go │ ├── error_test.go │ ├── helpers.go │ ├── helpers_test.go │ ├── locals.go │ ├── lookup.go │ ├── lookup_test.go │ ├── output.template │ ├── outputs.go │ ├── outputs_test.go │ ├── parameters.go │ ├── parse.go │ ├── parse_test.go │ ├── resource.go │ ├── resources.go │ ├── resources │ │ ├── azurerm_active_directory_domain_service.template │ │ ├── azurerm_analysis_services_server.template │ │ ├── azurerm_api_management.template │ │ ├── azurerm_application_gateway.template │ │ ├── azurerm_availability_set.template │ │ ├── azurerm_bastion_host.template │ │ ├── azurerm_container_app.template │ │ ├── azurerm_container_app_environment.template │ │ ├── azurerm_container_registry.template │ │ ├── azurerm_key_vault.template │ │ ├── azurerm_kubernetes_cluster.template │ │ ├── azurerm_log_analytics_solution.template │ │ ├── azurerm_log_analytics_workspace.template │ │ ├── azurerm_managed_disk.template │ │ ├── azurerm_monitor_activity_log_alert.template │ │ ├── azurerm_network_interface.template │ │ ├── azurerm_network_interface_application_gateway_backend_address_pool_association.template │ │ ├── azurerm_network_security_group.template │ │ ├── azurerm_network_security_rule.template │ │ ├── azurerm_private_dns_zone.template │ │ ├── azurerm_private_dns_zone_virtual_network_link.template │ │ ├── azurerm_private_endpoint.template │ │ ├── azurerm_public_ip.template │ │ ├── azurerm_role_assignment.template │ │ ├── azurerm_role_definition.template │ │ ├── azurerm_servicebus_namespace.template │ │ ├── azurerm_servicebus_namespace_authorization_rule.template │ │ ├── azurerm_servicebus_queue.template │ │ ├── azurerm_storage_account.template │ │ ├── azurerm_subnet.template │ │ ├── azurerm_template_deployment.template │ │ ├── azurerm_user_assigned_identity.template │ │ ├── azurerm_virtual_machine.template │ │ ├── azurerm_virtual_machine_extension.template │ │ ├── azurerm_virtual_network.template │ │ └── azurerm_web_application_firewall_policy.template │ ├── resources_test.go │ ├── variable.go │ ├── variable.template │ ├── variables.go │ └── variables_test.go ├── cf │ ├── data.go │ ├── errors.go │ ├── errors_test.go │ ├── helpers.go │ ├── helpers_test.go │ ├── lookup.go │ ├── lookup_test.go │ ├── parse.go │ ├── parse_test.go │ ├── resource_mapping.go │ ├── resources.go │ ├── resources │ │ ├── aws_appautoscaling_policy.template │ │ ├── aws_appautoscaling_target.template │ │ ├── aws_athena_named_query.template │ │ ├── aws_athena_workgroup.template │ │ ├── aws_autoscaling_group.template │ │ ├── aws_autoscaling_lifecycle_hook.template │ │ ├── aws_autoscaling_policy.template │ │ ├── aws_autoscaling_schedule.template │ │ ├── aws_backup_plan.template │ │ ├── aws_backup_selection.template │ │ ├── aws_backup_vault.template │ │ ├── aws_cloud9_environment_ec2.template │ │ ├── aws_cloudformation_stack.template │ │ ├── aws_cloudfront_distribution.template │ │ ├── aws_cloudfront_origin_access_identity.template │ │ ├── aws_cloudwatch_dashboard.template │ │ ├── aws_cloudwatch_event_rule.template │ │ ├── aws_cloudwatch_log_group.template │ │ ├── aws_cloudwatch_log_metric_filter.template │ │ ├── aws_cloudwatch_metric_alarm.template │ │ ├── aws_codebuild_project.template │ │ ├── aws_codecommit_repository.template │ │ ├── aws_codepipeline.template │ │ ├── aws_config_config_rule.template │ │ ├── aws_config_configuration_recorder.template │ │ ├── aws_config_delivery_channel.template │ │ ├── aws_db_instance.template │ │ ├── aws_db_parameter_group.template │ │ ├── aws_db_subnet_group.template │ │ ├── aws_directory_service_directory.template │ │ ├── aws_dms_endpoint.template │ │ ├── aws_dms_replication_instance.template │ │ ├── aws_dms_replication_subnet_group.template │ │ ├── aws_dms_replication_task.template │ │ ├── aws_dynamodb_table.template │ │ ├── aws_ebs_volume.template │ │ ├── aws_ecs_cluster.template │ │ ├── aws_ecs_service.template │ │ ├── aws_ecs_task_definition.template │ │ ├── aws_efs_file_system.template │ │ ├── aws_efs_mount_target.template │ │ ├── aws_eip.template │ │ ├── aws_eip_association.template │ │ ├── aws_eks_cluster.template │ │ ├── aws_eks_node_group.template │ │ ├── aws_elasticache_parameter_group.template │ │ ├── aws_elasticache_replication_group.template │ │ ├── aws_elasticache_subnet_group.template │ │ ├── aws_elb.template │ │ ├── aws_flow_log.template │ │ ├── aws_iam_access_key.template │ │ ├── aws_iam_group.template │ │ ├── aws_iam_group_membership.template │ │ ├── aws_iam_instance_profile.template │ │ ├── aws_iam_managed_policy.template │ │ ├── aws_iam_policy.template │ │ ├── aws_iam_role.template │ │ ├── aws_iam_user.template │ │ ├── aws_instance.template │ │ ├── aws_internet_gateway.template │ │ ├── aws_kinesis_firehose_delivery_stream.template │ │ ├── aws_kms_alias.template │ │ ├── aws_kms_key.template │ │ ├── aws_lambda_event_source_mapping.template │ │ ├── aws_lambda_function.template │ │ ├── aws_lambda_permission.template │ │ ├── aws_lambda_version.template │ │ ├── aws_launch_configuration.template │ │ ├── aws_launch_template.template │ │ ├── aws_lb.template │ │ ├── aws_lb_listener.template │ │ ├── aws_lb_listener_rule.template │ │ ├── aws_lb_target_group.template │ │ ├── aws_nat_gateway.template │ │ ├── aws_neptune_cluster.template │ │ ├── aws_neptune_cluster_instance.template │ │ ├── aws_neptune_cluster_parameter_group.template │ │ ├── aws_neptune_parameter_group.template │ │ ├── aws_neptune_subnet_group.template │ │ ├── aws_network_acl.template │ │ ├── aws_network_acl_association.template │ │ ├── aws_network_acl_rule.template │ │ ├── aws_network_interface.template │ │ ├── aws_rds_cluster.template │ │ ├── aws_route.template │ │ ├── aws_route53_record.template │ │ ├── aws_route_table.template │ │ ├── aws_route_table_association.template │ │ ├── aws_s3_bucket.template │ │ ├── aws_s3_bucket_policy.template │ │ ├── aws_secretsmanager_secret.template │ │ ├── aws_security_group.template │ │ ├── aws_security_group_rule_egress.template │ │ ├── aws_security_group_rule_ingress.template │ │ ├── aws_service_discovery_service.template │ │ ├── aws_servicecatalog_portfolio.template │ │ ├── aws_servicecatalog_portfolio_share.template │ │ ├── aws_servicecatalog_product_portfolio_association.template │ │ ├── aws_servicecatalog_tag_option.template │ │ ├── aws_servicecatalog_tag_option_resource_association.template │ │ ├── aws_sfn_state_machine.template │ │ ├── aws_sns_topic.template │ │ ├── aws_sns_topic_policy.template │ │ ├── aws_sns_topic_subscription.template │ │ ├── aws_sqs_queue.template │ │ ├── aws_ssm_association.template │ │ ├── aws_ssm_document.template │ │ ├── aws_ssm_maintenance_window.template │ │ ├── aws_ssm_maintenance_window_target.template │ │ ├── aws_ssm_maintenance_window_task.template │ │ ├── aws_subnet.template │ │ ├── aws_vpc.template │ │ ├── aws_vpc_dhcp_options.template │ │ ├── aws_vpc_dhcp_options_association.template │ │ ├── aws_vpc_endpoint.template │ │ ├── aws_vpn_gateway_attachment.template │ │ └── aws_wafv2_web_acl_association.template │ ├── testdata │ │ ├── min.cg.yaml │ │ └── minwithparams.cg.yaml │ ├── variable.go │ └── variable.template ├── see │ ├── lookup.go │ ├── lookup_test.go │ └── resource_mapping.go └── version │ └── version.go ├── tests ├── integration │ └── integration_test.go └── utils │ └── utils.go └── todo.txt /.checkov.yaml: -------------------------------------------------------------------------------- 1 | block-list-secret-scan: [ ] 2 | branch: master 3 | directory: 4 | - . 5 | download-external-modules: false 6 | evaluate-variables: true 7 | external-modules-download-path: .external_modules 8 | framework: 9 | - secrets 10 | - dockerfile 11 | - github_configuration 12 | - github_actions 13 | - json 14 | - yaml 15 | - sca_package 16 | - sca_image 17 | mask: [ ] 18 | secrets-history-timeout: 12h 19 | secrets-scan-file-type: [ ] 20 | skip-path: 21 | - terraform 22 | - venv 23 | summary-position: top 24 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behaviour: 15 | 16 | 1. Go to '...' 17 | 2. Click on '...' 18 | 3. Scroll down to '...' 19 | 4. See error 20 | 21 | **Expected behaviour** 22 | A clear and concise description of what you expected to happen. 23 | 24 | **Screenshots** 25 | If applicable, add screenshots to help explain your problem. 26 | 27 | **Desktop (please complete the following information):** 28 | 29 | - OS: [e.g. iOS] 30 | - Browser [e.g. chrome, safari] 31 | - Version [e.g. 22] 32 | 33 | **Smartphone (please complete the following information):** 34 | 35 | - Device: [e.g. iPhone6] 36 | - OS: [e.g. iOS8.1] 37 | - Browser [e.g. stock browser, safari] 38 | - Version [e.g. 22] 39 | 40 | **Additional context** 41 | Add any other context about the problem here. 42 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. 12 | Ex. I'm always frustrated when [...] 13 | 14 | **Describe the solution you'd like** 15 | A clear and concise description of what you want to happen. 16 | 17 | **Describe alternatives you've considered** 18 | A clear and concise description of any alternative solutions or features you've considered. 19 | 20 | **Additional context** 21 | Add any other context or screenshots about the feature request here. 22 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: 'Stale' 2 | on: 3 | schedule: 4 | - cron: '30 1 * * *' 5 | workflow_dispatch: 6 | permissions: read-all 7 | 8 | jobs: 9 | stale: 10 | permissions: 11 | contents: write 12 | issues: write 13 | pull-requests: write 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 17 | with: 18 | stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.' 19 | days-before-stale: 30 20 | days-before-close: 5 21 | enable-statistics: true 22 | exempt-issue-labels: enhancement 23 | exempt-pr-labels: enhancement 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | sato.exe 2 | sato 3 | vendor 4 | .sato 5 | .idea 6 | .terraform 7 | terraform.tfstate 8 | .terraform.lock.hcl 9 | .vscode/ 10 | pike 11 | .pytest_cache/ 12 | *.backup 13 | __debug_bin.exe 14 | .DS_Store 15 | *.orig 16 | .terraform.tfstate.lock.info 17 | .pike 18 | provider.azure.tf 19 | *.js 20 | *.zip 21 | arm/test-output/ 22 | src/arm/test-output/ 23 | src/arm/nowhere/ 24 | src/cf/test.tf 25 | src/cf/*.txt 26 | src/cf/*.tf 27 | -------------------------------------------------------------------------------- /.goreleaser.yml: -------------------------------------------------------------------------------- 1 | # .goreleaser.yml 2 | 3 | # The lines below are called `modelines`. See `:help modeline` 4 | # Feel free to remove those if you don't want/need to use them. 5 | # yaml-language-server: $schema=https://goreleaser.com/static/schema.json 6 | # vim: set ts=2 sw=2 tw=0 fo=cnqoj 7 | 8 | version: 2 9 | 10 | before: 11 | hooks: 12 | - ./set-version.sh 13 | 14 | builds: 15 | - goos: 16 | - darwin 17 | - linux 18 | - windows 19 | goarch: 20 | - "386" 21 | - amd64 22 | - arm64 23 | goarm: 24 | - "7" 25 | ignore: 26 | - goarch: "386" 27 | goos: darwin 28 | archives: 29 | - format_overrides: 30 | - goos: windows 31 | format: zip 32 | 33 | brews: 34 | - name: sato 35 | 36 | repository: 37 | owner: JamesWoolfenden 38 | name: homebrew-tap 39 | token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}" 40 | 41 | 42 | commit_author: 43 | name: "GitHub Action" 44 | email: action@github.com 45 | 46 | homepage: "https://github.com/JamesWoolfenden/sato#readme" 47 | 48 | description: "Sato is for converting Cloudformation to Terraform" 49 | 50 | install: | 51 | bin.install "sato" 52 | 53 | test: | 54 | system "#{bin}/sato", "--help" 55 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | sato 2 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/sato.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD013": false, 3 | "MD033": { 4 | "allowed_elements": [ 5 | "small" 6 | ] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.run/test sato parse.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine 2 | 3 | RUN apk --no-cache add build-base git curl jq bash 4 | RUN curl -s -k https://api.github.com/repos/JamesWoolfenden/sato/releases/latest | jq '.assets[] | select(.name | contains("linux_386")) | select(.content_type | contains("gzip")) | .browser_download_url' -r | awk '{print "curl -L -k " $0 " -o ./sato.tar.gz"}' | sh 5 | RUN tar -xf ./sato.tar.gz -C /usr/bin/ && rm ./sato.tar.gz && chmod +x /usr/bin/sato && echo 'alias sato="/usr/bin/sato"' >> ~/.bashrc 6 | COPY entrypoint.sh /entrypoint.sh 7 | 8 | # Code file to execute when the docker container starts up (`entrypoint.sh`) 9 | ENTRYPOINT ["/entrypoint.sh"] 10 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | I'm only supporting the latest version, and required changes will be releases ASAP. 6 | 7 | ## Reporting a Vulnerability 8 | 9 | Contact James Woolfenden at gmail dot com. 10 | -------------------------------------------------------------------------------- /bump.ps1: -------------------------------------------------------------------------------- 1 | param( 2 | [Parameter(Mandatory = $false)] 3 | [ValidateNotNullOrEmpty()] 4 | [string]$message = "new release" 5 | ) 6 | 7 | $versionPattern = '^\d+\.\d+\.\d+$' 8 | $version = $null 9 | 10 | try 11 | { 12 | $version = $( git describe --tags --abbrev=0 ) -replace "v" 13 | if ($version -notmatch $versionPattern) 14 | { 15 | Write-Error "Invalid version format $version. Expected: x.y.z" 16 | exit 1 17 | } 18 | 19 | $splitter = $version.split(".") 20 | $build = [int]($splitter[2]) + 1 21 | [string]$newVersion = $splitter[0] + "." + $splitter[1] + "." + $build.ToString() 22 | 23 | if ([version]$newVersion -le [version]$version) 24 | { 25 | Write-Error "New version must be greater than current version" 26 | exit 1 27 | } 28 | 29 | Write-Host "Current version: $version" 30 | Write-Host "New version: $newVersion" 31 | Write-Host "Creating new tag..." 32 | 33 | git tag -a v$newVersion -m "$message" 34 | git push origin v$newVersion 35 | } 36 | catch 37 | { 38 | Write-Error "An error occurred: $_" 39 | exit 1 40 | } 41 | -------------------------------------------------------------------------------- /bump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Parameters 4 | message="${1:-new release}" 5 | 6 | # Version pattern 7 | versionPattern='^[0-9]+\.[0-9]+\.[0-9]+$' 8 | version='' 9 | 10 | # Get the current version 11 | version=$(git describe --tags --abbrev=0 2>/dev/null) 12 | version=${version//v} 13 | if [[ ! $version =~ $versionPattern ]]; then 14 | echo "Invalid version format. Expected: x.y.z" 15 | exit 1 16 | fi 17 | 18 | # Split the version and increment the build number 19 | IFS='.' read -r major minor build <<< "$version" 20 | newBuild=$((build + 1)) 21 | newVersion="$major.$minor.$newBuild" 22 | 23 | if [[ ! "$newVersion" > "$version" ]]; then 24 | echo "New version must be greater than current version" 25 | exit 1 26 | fi 27 | 28 | # Output the current and new version 29 | echo "Current version: $version" 30 | echo "New version: $newVersion" 31 | echo "Creating new tag..." 32 | 33 | # Create a new tag and push it 34 | git tag -a "v$newVersion" -m "$message" 35 | git push origin "v$newVersion" 36 | -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Leverage the default env variables as described in: 4 | # https://docs.github.com/en/actions/reference/environment-variables#default-environment-variables 5 | if [[ $GITHUB_ACTIONS != "true" ]] 6 | then 7 | /usr/bin/sato "$@" 8 | exit $? 9 | fi 10 | 11 | flags="" 12 | 13 | echo "running command:" 14 | echo sato parse -f "$INPUT_FILE" "$flags" 15 | 16 | /usr/bin/sato parse -f "$INPUT_FILE" "$flags" 17 | export sato_EXIT_CODE=$? 18 | -------------------------------------------------------------------------------- /examples/arm/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", 3 | "contentVersion": "1.0.0.0", 4 | "parameters": { 5 | "adminPassword": { 6 | "value": "GEN-PASSWORD" 7 | }, 8 | "adminUsername": { 9 | "value": "GEN-UNIQUE" 10 | }, 11 | "dnsLabelPrefix": { 12 | "value": "GEN-UNIQUE" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /examples/arm/microsoft.compute/vm-simple-windows/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://aka.ms/azure-quickstart-templates-metadata-schema#", 3 | "dateUpdated": "2023-04-21", 4 | "description": "This template allows you to deploy a simple Windows VM using a few different options for the Windows version, using the latest patched version. This will deploy an A2 size VM in the resource group location and return the FQDN of the VM.", 5 | "docOwner": "cynthn", 6 | "githubUsername": "bmoore-msft", 7 | "icon": "windowsVM", 8 | "itemDisplayName": "Deploy a simple Windows VM", 9 | "summary": "This template takes a minimum amount of parameters and deploys a Windows VM, using the latest patched version.", 10 | "type": "QuickStart" 11 | } 12 | -------------------------------------------------------------------------------- /examples/arm/smallest.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", 3 | "apiProfile": "", 4 | "contentVersion": "", 5 | "definitions": {}, 6 | "functions": [], 7 | "languageVersion": "", 8 | "outputs": {}, 9 | "parameters": {}, 10 | "resources": [], 11 | "variables": {} 12 | } 13 | -------------------------------------------------------------------------------- /examples/arm/smallest.yaml: -------------------------------------------------------------------------------- 1 | AWSTemplateFormatVersion: "2010-09-09" 2 | Description: AMi Factory Set up template 3 | 4 | Parameters: 5 | InstanceType: 6 | Type: String 7 | Default: t2.small 8 | Description: Instance Type 9 | SubnetId: 10 | Type: AWS::EC2::Subnet::Id 11 | Description: Subnet ID to run the EC2 instance for AMI building 12 | NotificationEmail: 13 | Type: String 14 | Description: Email id to be notified once AMI is created 15 | 16 | Resources: 17 | SNSTopic: 18 | Type: AWS::SNS::Topic 19 | Properties: 20 | Subscription: 21 | - Endpoint: !Ref NotificationEmail 22 | Protocol: "email" 23 | -------------------------------------------------------------------------------- /examples/athena.yaml: -------------------------------------------------------------------------------- 1 | Resources: 2 | 3 | athenworkgroup: 4 | Type: AWS::Athena::WorkGroup 5 | Properties: 6 | Name: "my-workgroup" 7 | State: "ENABLED" 8 | 9 | securityhubAthenaView: 10 | Type: AWS::Athena::NamedQuery 11 | Properties: 12 | Name: AWS-athena 13 | Database: !Ref database 14 | WorkGroup: !Ref athenworkgroup 15 | QueryString: > 16 | SELECT * FROM "my_table" WHERE "severity" = 'CRITICAL' 17 | 18 | MyAthenaWorkGroup: 19 | Type: 'AWS::Athena::WorkGroup' 20 | Properties: 21 | Name: "MyCustomWorkGroup" 22 | Description: "My WorkGroup" 23 | State: "ENABLED" 24 | Tags: 25 | - Key: "key1" 26 | Value: "value1" 27 | - Key: "key2" 28 | Value: "value2" 29 | WorkGroupConfiguration: 30 | BytesScannedCutoffPerQuery: 200000000 31 | EnforceWorkGroupConfiguration: false 32 | PublishCloudWatchMetricsEnabled: false 33 | RequesterPaysEnabled: true 34 | ResultConfiguration: 35 | OutputLocation: "s3://path/to/my/bucket/" 36 | -------------------------------------------------------------------------------- /examples/kinesis.yaml: -------------------------------------------------------------------------------- 1 | Resources: 2 | SecHubEventsFirehoseDeliveryStream: 3 | Type: AWS::KinesisFirehose::DeliveryStream 4 | Properties: 5 | DeliveryStreamName: aws-sechub-logs-kinesis-delivery-stream 6 | DeliveryStreamType: DirectPut 7 | DeliveryStreamEncryptionConfigurationInput: 8 | KeyType: AWS_OWNED_CMK 9 | ExtendedS3DestinationConfiguration: 10 | BucketARN: !GetAtt S3Bucketsechubyashdatafirehose.Arn 11 | Prefix: !Sub "sechub_events/managementid=${AWS::AccountId}/!{timestamp:yyyy}/!{timestamp:MM}/!{timestamp:dd}/" 12 | ErrorOutputPrefix: "aws-sechub-logs-firehose-error/" 13 | RoleARN: !GetAtt kinesisFirehoseRole.Arn 14 | CloudWatchLoggingOptions: 15 | Enabled: true 16 | LogGroupName: !Ref FirehoseLogGroup 17 | LogStreamName: !Ref FirehoseLogStream 18 | BufferingHints: 19 | IntervalInSeconds: 900 20 | SizeInMBs: 30 21 | CompressionFormat: "GZIP" 22 | ProcessingConfiguration: 23 | Enabled: true 24 | Processors: 25 | - Type: Lambda 26 | Parameters: 27 | - ParameterName: LambdaArn 28 | ParameterValue: !GetAtt LambdaFunctiontransformationsechub.Arn 29 | - ParameterName: BufferIntervalInSeconds 30 | ParameterValue: "600" 31 | - ParameterName: BufferSizeInMBs 32 | ParameterValue: "3" 33 | -------------------------------------------------------------------------------- /examples/template.yaml: -------------------------------------------------------------------------------- 1 | AWSTemplateFormatVersion: 2010-09-09 2 | 3 | Resources: 4 | ExampleTopic: 5 | Type: AWS::SNS::Topic 6 | Properties: 7 | TopicName: example 8 | -------------------------------------------------------------------------------- /schema/README.md: -------------------------------------------------------------------------------- 1 | # lookup 2 | 3 | from 4 | 5 | Using us-east-1 as base. 6 | 7 | -------------------------------------------------------------------------------- /schema/aws-amazonmq-configurationassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Broker" 5 | ], 6 | "definitions": { 7 | "ConfigurationId": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Id": { 11 | "type": "string" 12 | }, 13 | "Revision": { 14 | "type": "integer" 15 | } 16 | }, 17 | "required": [ 18 | "Revision", 19 | "Id" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::AmazonMQ::ConfigurationAssociation", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "Broker": { 30 | "type": "string" 31 | }, 32 | "Configuration": { 33 | "$ref": "#/definitions/ConfigurationId" 34 | }, 35 | "Id": { 36 | "type": "string" 37 | } 38 | }, 39 | "readOnlyProperties": [ 40 | "/properties/Id" 41 | ], 42 | "required": [ 43 | "Configuration", 44 | "Broker" 45 | ], 46 | "typeName": "AWS::AmazonMQ::ConfigurationAssociation" 47 | } 48 | -------------------------------------------------------------------------------- /schema/aws-apigateway-account.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "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.", 4 | "handlers": { 5 | "create": { 6 | "permissions": [ 7 | "apigateway:PATCH", 8 | "iam:GetRole", 9 | "iam:PassRole" 10 | ] 11 | }, 12 | "delete": { 13 | "permissions": [ 14 | "apigateway:PATCH" 15 | ] 16 | }, 17 | "read": { 18 | "permissions": [ 19 | "apigateway:GET" 20 | ] 21 | }, 22 | "update": { 23 | "permissions": [ 24 | "apigateway:PATCH", 25 | "iam:GetRole", 26 | "iam:PassRole" 27 | ] 28 | } 29 | }, 30 | "primaryIdentifier": [ 31 | "/properties/Id" 32 | ], 33 | "properties": { 34 | "CloudWatchRoleArn": { 35 | "description": "", 36 | "type": "string" 37 | }, 38 | "Id": { 39 | "description": "", 40 | "type": "string" 41 | } 42 | }, 43 | "readOnlyProperties": [ 44 | "/properties/Id" 45 | ], 46 | "sourceUrl": "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-apigateway", 47 | "tagging": { 48 | "taggable": false 49 | }, 50 | "typeName": "AWS::ApiGateway::Account" 51 | } 52 | -------------------------------------------------------------------------------- /schema/aws-appstream-stackfleetassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::AppStream::StackFleetAssociation", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "FleetName": { 9 | "type": "string" 10 | }, 11 | "Id": { 12 | "type": "string" 13 | }, 14 | "StackName": { 15 | "type": "string" 16 | } 17 | }, 18 | "readOnlyProperties": [ 19 | "/properties/Id" 20 | ], 21 | "required": [ 22 | "FleetName", 23 | "StackName" 24 | ], 25 | "typeName": "AWS::AppStream::StackFleetAssociation" 26 | } 27 | -------------------------------------------------------------------------------- /schema/aws-appstream-stackuserassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/StackName", 5 | "/properties/AuthenticationType", 6 | "/properties/SendEmailNotification", 7 | "/properties/UserName" 8 | ], 9 | "description": "Resource Type definition for AWS::AppStream::StackUserAssociation", 10 | "primaryIdentifier": [ 11 | "/properties/Id" 12 | ], 13 | "properties": { 14 | "AuthenticationType": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "SendEmailNotification": { 21 | "type": "boolean" 22 | }, 23 | "StackName": { 24 | "type": "string" 25 | }, 26 | "UserName": { 27 | "type": "string" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "StackName", 35 | "UserName", 36 | "AuthenticationType" 37 | ], 38 | "typeName": "AWS::AppStream::StackUserAssociation" 39 | } 40 | -------------------------------------------------------------------------------- /schema/aws-appstream-user.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/FirstName", 5 | "/properties/MessageAction", 6 | "/properties/LastName", 7 | "/properties/AuthenticationType", 8 | "/properties/UserName" 9 | ], 10 | "description": "Resource Type definition for AWS::AppStream::User", 11 | "primaryIdentifier": [ 12 | "/properties/Id" 13 | ], 14 | "properties": { 15 | "AuthenticationType": { 16 | "type": "string" 17 | }, 18 | "FirstName": { 19 | "type": "string" 20 | }, 21 | "Id": { 22 | "type": "string" 23 | }, 24 | "LastName": { 25 | "type": "string" 26 | }, 27 | "MessageAction": { 28 | "type": "string" 29 | }, 30 | "UserName": { 31 | "type": "string" 32 | } 33 | }, 34 | "readOnlyProperties": [ 35 | "/properties/Id" 36 | ], 37 | "required": [ 38 | "UserName", 39 | "AuthenticationType" 40 | ], 41 | "typeName": "AWS::AppStream::User" 42 | } 43 | -------------------------------------------------------------------------------- /schema/aws-appsync-apicache.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApiId" 5 | ], 6 | "description": "Resource Type definition for AWS::AppSync::ApiCache", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApiCachingBehavior": { 12 | "type": "string" 13 | }, 14 | "ApiId": { 15 | "type": "string" 16 | }, 17 | "AtRestEncryptionEnabled": { 18 | "type": "boolean" 19 | }, 20 | "HealthMetricsConfig": { 21 | "type": "string" 22 | }, 23 | "Id": { 24 | "type": "string" 25 | }, 26 | "TransitEncryptionEnabled": { 27 | "type": "boolean" 28 | }, 29 | "Ttl": { 30 | "type": "number" 31 | }, 32 | "Type": { 33 | "type": "string" 34 | } 35 | }, 36 | "readOnlyProperties": [ 37 | "/properties/Id" 38 | ], 39 | "required": [ 40 | "Type", 41 | "ApiId", 42 | "ApiCachingBehavior", 43 | "Ttl" 44 | ], 45 | "typeName": "AWS::AppSync::ApiCache" 46 | } 47 | -------------------------------------------------------------------------------- /schema/aws-appsync-apikey.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApiId" 5 | ], 6 | "description": "Resource Type definition for AWS::AppSync::ApiKey", 7 | "primaryIdentifier": [ 8 | "/properties/ApiKeyId" 9 | ], 10 | "properties": { 11 | "ApiId": { 12 | "type": "string" 13 | }, 14 | "ApiKey": { 15 | "type": "string" 16 | }, 17 | "ApiKeyId": { 18 | "type": "string" 19 | }, 20 | "Arn": { 21 | "type": "string" 22 | }, 23 | "Description": { 24 | "type": "string" 25 | }, 26 | "Expires": { 27 | "type": "number" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/ApiKeyId", 32 | "/properties/ApiKey", 33 | "/properties/Arn" 34 | ], 35 | "required": [ 36 | "ApiId" 37 | ], 38 | "typeName": "AWS::AppSync::ApiKey" 39 | } 40 | -------------------------------------------------------------------------------- /schema/aws-appsync-graphqlschema.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApiId" 5 | ], 6 | "description": "Resource Type definition for AWS::AppSync::GraphQLSchema", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApiId": { 12 | "type": "string" 13 | }, 14 | "Definition": { 15 | "type": "string" 16 | }, 17 | "DefinitionS3Location": { 18 | "type": "string" 19 | }, 20 | "Id": { 21 | "type": "string" 22 | } 23 | }, 24 | "readOnlyProperties": [ 25 | "/properties/Id" 26 | ], 27 | "required": [ 28 | "ApiId" 29 | ], 30 | "typeName": "AWS::AppSync::GraphQLSchema" 31 | } 32 | -------------------------------------------------------------------------------- /schema/aws-cloudformation-customresource.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ServiceToken" 5 | ], 6 | "description": "Resource Type definition for AWS::CloudFormation::CustomResource", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Id": { 12 | "type": "string" 13 | }, 14 | "ServiceTimeout": { 15 | "type": "integer" 16 | }, 17 | "ServiceToken": { 18 | "type": "string" 19 | } 20 | }, 21 | "readOnlyProperties": [ 22 | "/properties/Id" 23 | ], 24 | "required": [ 25 | "ServiceToken" 26 | ], 27 | "typeName": "AWS::CloudFormation::CustomResource" 28 | } 29 | -------------------------------------------------------------------------------- /schema/aws-cloudformation-macro.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "description": "Resource Type definition for AWS::CloudFormation::Macro", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Description": { 12 | "type": "string" 13 | }, 14 | "FunctionName": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "LogGroupName": { 21 | "type": "string" 22 | }, 23 | "LogRoleARN": { 24 | "type": "string" 25 | }, 26 | "Name": { 27 | "type": "string" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "FunctionName", 35 | "Name" 36 | ], 37 | "typeName": "AWS::CloudFormation::Macro" 38 | } 39 | -------------------------------------------------------------------------------- /schema/aws-cloudformation-waitcondition.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::CloudFormation::WaitCondition", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "Count": { 9 | "type": "integer" 10 | }, 11 | "Data": { 12 | "type": "object" 13 | }, 14 | "Handle": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "Timeout": { 21 | "type": "string" 22 | } 23 | }, 24 | "readOnlyProperties": [ 25 | "/properties/Data", 26 | "/properties/Id" 27 | ], 28 | "typeName": "AWS::CloudFormation::WaitCondition" 29 | } 30 | -------------------------------------------------------------------------------- /schema/aws-cloudformation-waitconditionhandle.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::CloudFormation::WaitConditionHandle", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "Id": { 9 | "type": "string" 10 | } 11 | }, 12 | "readOnlyProperties": [ 13 | "/properties/Id" 14 | ], 15 | "typeName": "AWS::CloudFormation::WaitConditionHandle" 16 | } 17 | -------------------------------------------------------------------------------- /schema/aws-cloudwatch-insightrule.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/RuleName" 5 | ], 6 | "definitions": { 7 | "Tags": { 8 | "additionalProperties": false, 9 | "type": "object" 10 | } 11 | }, 12 | "description": "Resource Type definition for AWS::CloudWatch::InsightRule", 13 | "primaryIdentifier": [ 14 | "/properties/Id" 15 | ], 16 | "properties": { 17 | "Arn": { 18 | "type": "string" 19 | }, 20 | "Id": { 21 | "type": "string" 22 | }, 23 | "RuleBody": { 24 | "type": "string" 25 | }, 26 | "RuleName": { 27 | "type": "string" 28 | }, 29 | "RuleState": { 30 | "type": "string" 31 | }, 32 | "Tags": { 33 | "$ref": "#/definitions/Tags" 34 | } 35 | }, 36 | "readOnlyProperties": [ 37 | "/properties/Id", 38 | "/properties/Arn" 39 | ], 40 | "required": [ 41 | "RuleState", 42 | "RuleBody", 43 | "RuleName" 44 | ], 45 | "typeName": "AWS::CloudWatch::InsightRule" 46 | } 47 | -------------------------------------------------------------------------------- /schema/aws-codebuild-sourcecredential.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ServerType" 5 | ], 6 | "description": "Resource Type definition for AWS::CodeBuild::SourceCredential", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "AuthType": { 12 | "type": "string" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "ServerType": { 18 | "type": "string" 19 | }, 20 | "Token": { 21 | "type": "string" 22 | }, 23 | "Username": { 24 | "type": "string" 25 | } 26 | }, 27 | "readOnlyProperties": [ 28 | "/properties/Id" 29 | ], 30 | "required": [ 31 | "ServerType", 32 | "Token", 33 | "AuthType" 34 | ], 35 | "typeName": "AWS::CodeBuild::SourceCredential" 36 | } 37 | -------------------------------------------------------------------------------- /schema/aws-config-deliverychannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "definitions": { 7 | "ConfigSnapshotDeliveryProperties": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "DeliveryFrequency": { 11 | "type": "string" 12 | } 13 | }, 14 | "type": "object" 15 | } 16 | }, 17 | "description": "Resource Type definition for AWS::Config::DeliveryChannel", 18 | "primaryIdentifier": [ 19 | "/properties/Id" 20 | ], 21 | "properties": { 22 | "ConfigSnapshotDeliveryProperties": { 23 | "$ref": "#/definitions/ConfigSnapshotDeliveryProperties" 24 | }, 25 | "Id": { 26 | "type": "string" 27 | }, 28 | "Name": { 29 | "type": "string" 30 | }, 31 | "S3BucketName": { 32 | "type": "string" 33 | }, 34 | "S3KeyPrefix": { 35 | "type": "string" 36 | }, 37 | "S3KmsKeyArn": { 38 | "type": "string" 39 | }, 40 | "SnsTopicARN": { 41 | "type": "string" 42 | } 43 | }, 44 | "readOnlyProperties": [ 45 | "/properties/Id" 46 | ], 47 | "required": [ 48 | "S3BucketName" 49 | ], 50 | "typeName": "AWS::Config::DeliveryChannel" 51 | } 52 | -------------------------------------------------------------------------------- /schema/aws-dax-parametergroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ParameterGroupName" 5 | ], 6 | "description": "Resource Type definition for AWS::DAX::ParameterGroup", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Description": { 12 | "type": "string" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "ParameterGroupName": { 18 | "type": "string" 19 | }, 20 | "ParameterNameValues": { 21 | "type": "object" 22 | } 23 | }, 24 | "readOnlyProperties": [ 25 | "/properties/Id" 26 | ], 27 | "typeName": "AWS::DAX::ParameterGroup" 28 | } 29 | -------------------------------------------------------------------------------- /schema/aws-dax-subnetgroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/SubnetGroupName" 5 | ], 6 | "description": "Resource Type definition for AWS::DAX::SubnetGroup", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Description": { 12 | "type": "string" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "SubnetGroupName": { 18 | "type": "string" 19 | }, 20 | "SubnetIds": { 21 | "items": { 22 | "type": "string" 23 | }, 24 | "type": "array", 25 | "uniqueItems": false 26 | } 27 | }, 28 | "readOnlyProperties": [ 29 | "/properties/Id" 30 | ], 31 | "required": [ 32 | "SubnetIds" 33 | ], 34 | "typeName": "AWS::DAX::SubnetGroup" 35 | } 36 | -------------------------------------------------------------------------------- /schema/aws-dms-certificate.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/CertificateIdentifier", 5 | "/properties/CertificatePem", 6 | "/properties/CertificateWallet" 7 | ], 8 | "description": "Resource Type definition for AWS::DMS::Certificate", 9 | "primaryIdentifier": [ 10 | "/properties/Id" 11 | ], 12 | "properties": { 13 | "CertificateIdentifier": { 14 | "type": "string" 15 | }, 16 | "CertificatePem": { 17 | "type": "string" 18 | }, 19 | "CertificateWallet": { 20 | "type": "string" 21 | }, 22 | "Id": { 23 | "type": "string" 24 | } 25 | }, 26 | "readOnlyProperties": [ 27 | "/properties/Id" 28 | ], 29 | "typeName": "AWS::DMS::Certificate" 30 | } 31 | -------------------------------------------------------------------------------- /schema/aws-docdb-dbclusterparametergroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Family", 5 | "/properties/Description", 6 | "/properties/Name" 7 | ], 8 | "definitions": { 9 | "Tag": { 10 | "additionalProperties": false, 11 | "properties": { 12 | "Key": { 13 | "type": "string" 14 | }, 15 | "Value": { 16 | "type": "string" 17 | } 18 | }, 19 | "required": [ 20 | "Value", 21 | "Key" 22 | ], 23 | "type": "object" 24 | } 25 | }, 26 | "description": "Resource Type definition for AWS::DocDB::DBClusterParameterGroup", 27 | "primaryIdentifier": [ 28 | "/properties/Id" 29 | ], 30 | "properties": { 31 | "Description": { 32 | "type": "string" 33 | }, 34 | "Family": { 35 | "type": "string" 36 | }, 37 | "Id": { 38 | "type": "string" 39 | }, 40 | "Name": { 41 | "type": "string" 42 | }, 43 | "Parameters": { 44 | "type": "object" 45 | }, 46 | "Tags": { 47 | "items": { 48 | "$ref": "#/definitions/Tag" 49 | }, 50 | "type": "array", 51 | "uniqueItems": false 52 | } 53 | }, 54 | "readOnlyProperties": [ 55 | "/properties/Id" 56 | ], 57 | "required": [ 58 | "Family", 59 | "Description", 60 | "Parameters" 61 | ], 62 | "typeName": "AWS::DocDB::DBClusterParameterGroup" 63 | } 64 | -------------------------------------------------------------------------------- /schema/aws-docdb-dbsubnetgroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/DBSubnetGroupName" 5 | ], 6 | "definitions": { 7 | "Tag": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Key": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Key" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::DocDB::DBSubnetGroup", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "DBSubnetGroupDescription": { 30 | "type": "string" 31 | }, 32 | "DBSubnetGroupName": { 33 | "type": "string" 34 | }, 35 | "Id": { 36 | "type": "string" 37 | }, 38 | "SubnetIds": { 39 | "items": { 40 | "type": "string" 41 | }, 42 | "type": "array", 43 | "uniqueItems": false 44 | }, 45 | "Tags": { 46 | "items": { 47 | "$ref": "#/definitions/Tag" 48 | }, 49 | "type": "array", 50 | "uniqueItems": false 51 | } 52 | }, 53 | "readOnlyProperties": [ 54 | "/properties/Id" 55 | ], 56 | "required": [ 57 | "DBSubnetGroupDescription", 58 | "SubnetIds" 59 | ], 60 | "typeName": "AWS::DocDB::DBSubnetGroup" 61 | } 62 | -------------------------------------------------------------------------------- /schema/aws-docdb-eventsubscription.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/SubscriptionName", 5 | "/properties/SnsTopicArn" 6 | ], 7 | "description": "Resource Type definition for AWS::DocDB::EventSubscription", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Enabled": { 13 | "type": "boolean" 14 | }, 15 | "EventCategories": { 16 | "items": { 17 | "type": "string" 18 | }, 19 | "type": "array", 20 | "uniqueItems": false 21 | }, 22 | "Id": { 23 | "type": "string" 24 | }, 25 | "SnsTopicArn": { 26 | "type": "string" 27 | }, 28 | "SourceIds": { 29 | "items": { 30 | "type": "string" 31 | }, 32 | "type": "array", 33 | "uniqueItems": false 34 | }, 35 | "SourceType": { 36 | "type": "string" 37 | }, 38 | "SubscriptionName": { 39 | "type": "string" 40 | } 41 | }, 42 | "readOnlyProperties": [ 43 | "/properties/Id" 44 | ], 45 | "required": [ 46 | "SnsTopicArn" 47 | ], 48 | "typeName": "AWS::DocDB::EventSubscription" 49 | } 50 | -------------------------------------------------------------------------------- /schema/aws-ec2-clientvpnauthorizationrule.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ClientVpnEndpointId", 5 | "/properties/AuthorizeAllGroups", 6 | "/properties/Description", 7 | "/properties/AccessGroupId", 8 | "/properties/TargetNetworkCidr" 9 | ], 10 | "description": "Resource Type definition for AWS::EC2::ClientVpnAuthorizationRule", 11 | "primaryIdentifier": [ 12 | "/properties/Id" 13 | ], 14 | "properties": { 15 | "AccessGroupId": { 16 | "type": "string" 17 | }, 18 | "AuthorizeAllGroups": { 19 | "type": "boolean" 20 | }, 21 | "ClientVpnEndpointId": { 22 | "type": "string" 23 | }, 24 | "Description": { 25 | "type": "string" 26 | }, 27 | "Id": { 28 | "type": "string" 29 | }, 30 | "TargetNetworkCidr": { 31 | "type": "string" 32 | } 33 | }, 34 | "readOnlyProperties": [ 35 | "/properties/Id" 36 | ], 37 | "required": [ 38 | "ClientVpnEndpointId", 39 | "TargetNetworkCidr" 40 | ], 41 | "typeName": "AWS::EC2::ClientVpnAuthorizationRule" 42 | } 43 | -------------------------------------------------------------------------------- /schema/aws-ec2-clientvpnroute.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ClientVpnEndpointId", 5 | "/properties/DestinationCidrBlock", 6 | "/properties/Description", 7 | "/properties/TargetVpcSubnetId" 8 | ], 9 | "description": "Resource Type definition for AWS::EC2::ClientVpnRoute", 10 | "primaryIdentifier": [ 11 | "/properties/Id" 12 | ], 13 | "properties": { 14 | "ClientVpnEndpointId": { 15 | "type": "string" 16 | }, 17 | "Description": { 18 | "type": "string" 19 | }, 20 | "DestinationCidrBlock": { 21 | "type": "string" 22 | }, 23 | "Id": { 24 | "type": "string" 25 | }, 26 | "TargetVpcSubnetId": { 27 | "type": "string" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "ClientVpnEndpointId", 35 | "TargetVpcSubnetId", 36 | "DestinationCidrBlock" 37 | ], 38 | "typeName": "AWS::EC2::ClientVpnRoute" 39 | } 40 | -------------------------------------------------------------------------------- /schema/aws-ec2-clientvpntargetnetworkassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ClientVpnEndpointId", 5 | "/properties/SubnetId" 6 | ], 7 | "description": "Resource Type definition for AWS::EC2::ClientVpnTargetNetworkAssociation", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "ClientVpnEndpointId": { 13 | "type": "string" 14 | }, 15 | "Id": { 16 | "type": "string" 17 | }, 18 | "SubnetId": { 19 | "type": "string" 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/Id" 24 | ], 25 | "required": [ 26 | "ClientVpnEndpointId", 27 | "SubnetId" 28 | ], 29 | "typeName": "AWS::EC2::ClientVpnTargetNetworkAssociation" 30 | } 31 | -------------------------------------------------------------------------------- /schema/aws-ec2-networkinterfacepermission.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/AwsAccountId", 5 | "/properties/Permission", 6 | "/properties/NetworkInterfaceId" 7 | ], 8 | "description": "Resource Type definition for AWS::EC2::NetworkInterfacePermission", 9 | "primaryIdentifier": [ 10 | "/properties/Id" 11 | ], 12 | "properties": { 13 | "AwsAccountId": { 14 | "type": "string" 15 | }, 16 | "Id": { 17 | "type": "string" 18 | }, 19 | "NetworkInterfaceId": { 20 | "type": "string" 21 | }, 22 | "Permission": { 23 | "type": "string" 24 | } 25 | }, 26 | "readOnlyProperties": [ 27 | "/properties/Id" 28 | ], 29 | "required": [ 30 | "AwsAccountId", 31 | "NetworkInterfaceId", 32 | "Permission" 33 | ], 34 | "typeName": "AWS::EC2::NetworkInterfacePermission" 35 | } 36 | -------------------------------------------------------------------------------- /schema/aws-ec2-trafficmirrorfilter.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Description" 5 | ], 6 | "definitions": { 7 | "Tag": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Key": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Key" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::EC2::TrafficMirrorFilter", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "Description": { 30 | "type": "string" 31 | }, 32 | "Id": { 33 | "type": "string" 34 | }, 35 | "NetworkServices": { 36 | "items": { 37 | "type": "string" 38 | }, 39 | "type": "array", 40 | "uniqueItems": false 41 | }, 42 | "Tags": { 43 | "items": { 44 | "$ref": "#/definitions/Tag" 45 | }, 46 | "type": "array", 47 | "uniqueItems": false 48 | } 49 | }, 50 | "readOnlyProperties": [ 51 | "/properties/Id" 52 | ], 53 | "typeName": "AWS::EC2::TrafficMirrorFilter" 54 | } 55 | -------------------------------------------------------------------------------- /schema/aws-ec2-trafficmirrortarget.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/GatewayLoadBalancerEndpointId", 5 | "/properties/NetworkLoadBalancerArn", 6 | "/properties/NetworkInterfaceId", 7 | "/properties/Description" 8 | ], 9 | "definitions": { 10 | "Tag": { 11 | "additionalProperties": false, 12 | "properties": { 13 | "Key": { 14 | "type": "string" 15 | }, 16 | "Value": { 17 | "type": "string" 18 | } 19 | }, 20 | "required": [ 21 | "Value", 22 | "Key" 23 | ], 24 | "type": "object" 25 | } 26 | }, 27 | "description": "Resource Type definition for AWS::EC2::TrafficMirrorTarget", 28 | "primaryIdentifier": [ 29 | "/properties/Id" 30 | ], 31 | "properties": { 32 | "Description": { 33 | "type": "string" 34 | }, 35 | "GatewayLoadBalancerEndpointId": { 36 | "type": "string" 37 | }, 38 | "Id": { 39 | "type": "string" 40 | }, 41 | "NetworkInterfaceId": { 42 | "type": "string" 43 | }, 44 | "NetworkLoadBalancerArn": { 45 | "type": "string" 46 | }, 47 | "Tags": { 48 | "items": { 49 | "$ref": "#/definitions/Tag" 50 | }, 51 | "type": "array", 52 | "uniqueItems": false 53 | } 54 | }, 55 | "readOnlyProperties": [ 56 | "/properties/Id" 57 | ], 58 | "typeName": "AWS::EC2::TrafficMirrorTarget" 59 | } 60 | -------------------------------------------------------------------------------- /schema/aws-elasticache-securitygroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "definitions": { 4 | "Tag": { 5 | "additionalProperties": false, 6 | "properties": { 7 | "Key": { 8 | "type": "string" 9 | }, 10 | "Value": { 11 | "type": "string" 12 | } 13 | }, 14 | "required": [ 15 | "Value", 16 | "Key" 17 | ], 18 | "type": "object" 19 | } 20 | }, 21 | "description": "Resource Type definition for AWS::ElastiCache::SecurityGroup", 22 | "primaryIdentifier": [ 23 | "/properties/Id" 24 | ], 25 | "properties": { 26 | "Description": { 27 | "type": "string" 28 | }, 29 | "Id": { 30 | "type": "string" 31 | }, 32 | "Tags": { 33 | "items": { 34 | "$ref": "#/definitions/Tag" 35 | }, 36 | "type": "array", 37 | "uniqueItems": false 38 | } 39 | }, 40 | "readOnlyProperties": [ 41 | "/properties/Id" 42 | ], 43 | "required": [ 44 | "Description" 45 | ], 46 | "typeName": "AWS::ElastiCache::SecurityGroup" 47 | } 48 | -------------------------------------------------------------------------------- /schema/aws-elasticache-securitygroupingress.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::ElastiCache::SecurityGroupIngress", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "CacheSecurityGroupName": { 9 | "type": "string" 10 | }, 11 | "EC2SecurityGroupName": { 12 | "type": "string" 13 | }, 14 | "EC2SecurityGroupOwnerId": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | } 20 | }, 21 | "readOnlyProperties": [ 22 | "/properties/Id" 23 | ], 24 | "required": [ 25 | "EC2SecurityGroupName", 26 | "CacheSecurityGroupName" 27 | ], 28 | "typeName": "AWS::ElastiCache::SecurityGroupIngress" 29 | } 30 | -------------------------------------------------------------------------------- /schema/aws-elasticloadbalancingv2-listenercertificate.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ListenerArn" 5 | ], 6 | "definitions": { 7 | "Certificate": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "CertificateArn": { 11 | "type": "string" 12 | } 13 | }, 14 | "type": "object" 15 | } 16 | }, 17 | "description": "Resource Type definition for AWS::ElasticLoadBalancingV2::ListenerCertificate", 18 | "primaryIdentifier": [ 19 | "/properties/Id" 20 | ], 21 | "properties": { 22 | "Certificates": { 23 | "items": { 24 | "$ref": "#/definitions/Certificate" 25 | }, 26 | "type": "array", 27 | "uniqueItems": true 28 | }, 29 | "Id": { 30 | "type": "string" 31 | }, 32 | "ListenerArn": { 33 | "type": "string" 34 | } 35 | }, 36 | "readOnlyProperties": [ 37 | "/properties/Id" 38 | ], 39 | "required": [ 40 | "ListenerArn", 41 | "Certificates" 42 | ], 43 | "typeName": "AWS::ElasticLoadBalancingV2::ListenerCertificate" 44 | } 45 | -------------------------------------------------------------------------------- /schema/aws-events-eventbuspolicy.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/EventBusName", 5 | "/properties/StatementId" 6 | ], 7 | "definitions": { 8 | "Condition": { 9 | "additionalProperties": false, 10 | "properties": { 11 | "Key": { 12 | "type": "string" 13 | }, 14 | "Type": { 15 | "type": "string" 16 | }, 17 | "Value": { 18 | "type": "string" 19 | } 20 | }, 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::Events::EventBusPolicy", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "Action": { 30 | "type": "string" 31 | }, 32 | "Condition": { 33 | "$ref": "#/definitions/Condition" 34 | }, 35 | "EventBusName": { 36 | "type": "string" 37 | }, 38 | "Id": { 39 | "type": "string" 40 | }, 41 | "Principal": { 42 | "type": "string" 43 | }, 44 | "Statement": { 45 | "type": "object" 46 | }, 47 | "StatementId": { 48 | "type": "string" 49 | } 50 | }, 51 | "readOnlyProperties": [ 52 | "/properties/Id" 53 | ], 54 | "required": [ 55 | "StatementId" 56 | ], 57 | "typeName": "AWS::Events::EventBusPolicy" 58 | } 59 | -------------------------------------------------------------------------------- /schema/aws-eventschemas-registrypolicy.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::EventSchemas::RegistryPolicy", 4 | "handlers": { 5 | "create": { 6 | "permissions": [ 7 | "schemas:PutResourcePolicy", 8 | "schemas:GetResourcePolicy", 9 | "schemas:DescribeRegistry" 10 | ] 11 | }, 12 | "delete": { 13 | "permissions": [ 14 | "schemas:DeleteResourcePolicy", 15 | "schemas:GetResourcePolicy" 16 | ] 17 | }, 18 | "read": { 19 | "permissions": [ 20 | "schemas:GetResourcePolicy" 21 | ] 22 | }, 23 | "update": { 24 | "permissions": [ 25 | "schemas:PutResourcePolicy", 26 | "schemas:GetResourcePolicy" 27 | ] 28 | } 29 | }, 30 | "primaryIdentifier": [ 31 | "/properties/Id" 32 | ], 33 | "properties": { 34 | "Id": { 35 | "type": "string" 36 | }, 37 | "Policy": { 38 | "type": "object" 39 | }, 40 | "RegistryName": { 41 | "type": "string" 42 | }, 43 | "RevisionId": { 44 | "type": "string" 45 | } 46 | }, 47 | "readOnlyProperties": [ 48 | "/properties/Id" 49 | ], 50 | "required": [ 51 | "RegistryName", 52 | "Policy" 53 | ], 54 | "tagging": { 55 | "taggable": false 56 | }, 57 | "typeName": "AWS::EventSchemas::RegistryPolicy" 58 | } 59 | -------------------------------------------------------------------------------- /schema/aws-fsx-snapshot.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/VolumeId" 5 | ], 6 | "definitions": { 7 | "Tag": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Key": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Key" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::FSx::Snapshot", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "Id": { 30 | "type": "string" 31 | }, 32 | "Name": { 33 | "type": "string" 34 | }, 35 | "ResourceARN": { 36 | "type": "string" 37 | }, 38 | "Tags": { 39 | "items": { 40 | "$ref": "#/definitions/Tag" 41 | }, 42 | "type": "array", 43 | "uniqueItems": false 44 | }, 45 | "VolumeId": { 46 | "type": "string" 47 | } 48 | }, 49 | "readOnlyProperties": [ 50 | "/properties/ResourceARN", 51 | "/properties/Id" 52 | ], 53 | "required": [ 54 | "VolumeId", 55 | "Name" 56 | ], 57 | "typeName": "AWS::FSx::Snapshot" 58 | } 59 | -------------------------------------------------------------------------------- /schema/aws-glue-customentitytype.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::Glue::CustomEntityType", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "ContextWords": { 9 | "items": { 10 | "type": "string" 11 | }, 12 | "type": "array", 13 | "uniqueItems": false 14 | }, 15 | "Id": { 16 | "type": "string" 17 | }, 18 | "Name": { 19 | "type": "string" 20 | }, 21 | "RegexString": { 22 | "type": "string" 23 | }, 24 | "Tags": { 25 | "type": "object" 26 | } 27 | }, 28 | "readOnlyProperties": [ 29 | "/properties/Id" 30 | ], 31 | "typeName": "AWS::Glue::CustomEntityType" 32 | } 33 | -------------------------------------------------------------------------------- /schema/aws-glue-dataqualityruleset.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "definitions": { 4 | "DataQualityTargetTable": { 5 | "additionalProperties": false, 6 | "properties": { 7 | "DatabaseName": { 8 | "type": "string" 9 | }, 10 | "TableName": { 11 | "type": "string" 12 | } 13 | }, 14 | "type": "object" 15 | } 16 | }, 17 | "description": "Resource Type definition for AWS::Glue::DataQualityRuleset", 18 | "primaryIdentifier": [ 19 | "/properties/Id" 20 | ], 21 | "properties": { 22 | "ClientToken": { 23 | "type": "string" 24 | }, 25 | "Description": { 26 | "type": "string" 27 | }, 28 | "Id": { 29 | "type": "string" 30 | }, 31 | "Name": { 32 | "type": "string" 33 | }, 34 | "Ruleset": { 35 | "type": "string" 36 | }, 37 | "Tags": { 38 | "type": "object" 39 | }, 40 | "TargetTable": { 41 | "$ref": "#/definitions/DataQualityTargetTable" 42 | } 43 | }, 44 | "readOnlyProperties": [ 45 | "/properties/Id" 46 | ], 47 | "typeName": "AWS::Glue::DataQualityRuleset" 48 | } 49 | -------------------------------------------------------------------------------- /schema/aws-glue-workflow.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "description": "Resource Type definition for AWS::Glue::Workflow", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "DefaultRunProperties": { 12 | "type": "object" 13 | }, 14 | "Description": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "MaxConcurrentRuns": { 21 | "type": "integer" 22 | }, 23 | "Name": { 24 | "type": "string" 25 | }, 26 | "Tags": { 27 | "type": "object" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "typeName": "AWS::Glue::Workflow" 34 | } 35 | -------------------------------------------------------------------------------- /schema/aws-greengrass-connectordefinitionversion.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ConnectorDefinitionId", 5 | "/properties/Connectors" 6 | ], 7 | "definitions": { 8 | "Connector": { 9 | "additionalProperties": false, 10 | "properties": { 11 | "ConnectorArn": { 12 | "type": "string" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "Parameters": { 18 | "type": "object" 19 | } 20 | }, 21 | "required": [ 22 | "ConnectorArn", 23 | "Id" 24 | ], 25 | "type": "object" 26 | } 27 | }, 28 | "description": "Resource Type definition for AWS::Greengrass::ConnectorDefinitionVersion", 29 | "primaryIdentifier": [ 30 | "/properties/Id" 31 | ], 32 | "properties": { 33 | "ConnectorDefinitionId": { 34 | "type": "string" 35 | }, 36 | "Connectors": { 37 | "items": { 38 | "$ref": "#/definitions/Connector" 39 | }, 40 | "type": "array", 41 | "uniqueItems": false 42 | }, 43 | "Id": { 44 | "type": "string" 45 | } 46 | }, 47 | "readOnlyProperties": [ 48 | "/properties/Id" 49 | ], 50 | "required": [ 51 | "Connectors", 52 | "ConnectorDefinitionId" 53 | ], 54 | "typeName": "AWS::Greengrass::ConnectorDefinitionVersion" 55 | } 56 | -------------------------------------------------------------------------------- /schema/aws-greengrass-coredefinitionversion.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Cores", 5 | "/properties/CoreDefinitionId" 6 | ], 7 | "definitions": { 8 | "Core": { 9 | "additionalProperties": false, 10 | "properties": { 11 | "CertificateArn": { 12 | "type": "string" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "SyncShadow": { 18 | "type": "boolean" 19 | }, 20 | "ThingArn": { 21 | "type": "string" 22 | } 23 | }, 24 | "required": [ 25 | "ThingArn", 26 | "Id", 27 | "CertificateArn" 28 | ], 29 | "type": "object" 30 | } 31 | }, 32 | "description": "Resource Type definition for AWS::Greengrass::CoreDefinitionVersion", 33 | "primaryIdentifier": [ 34 | "/properties/Id" 35 | ], 36 | "properties": { 37 | "CoreDefinitionId": { 38 | "type": "string" 39 | }, 40 | "Cores": { 41 | "items": { 42 | "$ref": "#/definitions/Core" 43 | }, 44 | "type": "array", 45 | "uniqueItems": false 46 | }, 47 | "Id": { 48 | "type": "string" 49 | } 50 | }, 51 | "readOnlyProperties": [ 52 | "/properties/Id" 53 | ], 54 | "required": [ 55 | "Cores", 56 | "CoreDefinitionId" 57 | ], 58 | "typeName": "AWS::Greengrass::CoreDefinitionVersion" 59 | } 60 | -------------------------------------------------------------------------------- /schema/aws-greengrass-devicedefinitionversion.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/DeviceDefinitionId", 5 | "/properties/Devices" 6 | ], 7 | "definitions": { 8 | "Device": { 9 | "additionalProperties": false, 10 | "properties": { 11 | "CertificateArn": { 12 | "type": "string" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "SyncShadow": { 18 | "type": "boolean" 19 | }, 20 | "ThingArn": { 21 | "type": "string" 22 | } 23 | }, 24 | "required": [ 25 | "ThingArn", 26 | "Id", 27 | "CertificateArn" 28 | ], 29 | "type": "object" 30 | } 31 | }, 32 | "description": "Resource Type definition for AWS::Greengrass::DeviceDefinitionVersion", 33 | "primaryIdentifier": [ 34 | "/properties/Id" 35 | ], 36 | "properties": { 37 | "DeviceDefinitionId": { 38 | "type": "string" 39 | }, 40 | "Devices": { 41 | "items": { 42 | "$ref": "#/definitions/Device" 43 | }, 44 | "type": "array", 45 | "uniqueItems": false 46 | }, 47 | "Id": { 48 | "type": "string" 49 | } 50 | }, 51 | "readOnlyProperties": [ 52 | "/properties/Id" 53 | ], 54 | "required": [ 55 | "Devices", 56 | "DeviceDefinitionId" 57 | ], 58 | "typeName": "AWS::Greengrass::DeviceDefinitionVersion" 59 | } 60 | -------------------------------------------------------------------------------- /schema/aws-iam-accesskey.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/UserName", 5 | "/properties/Serial" 6 | ], 7 | "description": "Resource Type definition for AWS::IAM::AccessKey", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Id": { 13 | "type": "string" 14 | }, 15 | "SecretAccessKey": { 16 | "type": "string" 17 | }, 18 | "Serial": { 19 | "type": "integer" 20 | }, 21 | "Status": { 22 | "type": "string" 23 | }, 24 | "UserName": { 25 | "type": "string" 26 | } 27 | }, 28 | "readOnlyProperties": [ 29 | "/properties/SecretAccessKey", 30 | "/properties/Id" 31 | ], 32 | "required": [ 33 | "UserName" 34 | ], 35 | "typeName": "AWS::IAM::AccessKey" 36 | } 37 | -------------------------------------------------------------------------------- /schema/aws-iam-usertogroupaddition.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::IAM::UserToGroupAddition", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "GroupName": { 9 | "type": "string" 10 | }, 11 | "Id": { 12 | "type": "string" 13 | }, 14 | "Users": { 15 | "items": { 16 | "type": "string" 17 | }, 18 | "type": "array", 19 | "uniqueItems": false 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/Id" 24 | ], 25 | "required": [ 26 | "GroupName", 27 | "Users" 28 | ], 29 | "typeName": "AWS::IAM::UserToGroupAddition" 30 | } 31 | -------------------------------------------------------------------------------- /schema/aws-inspector-assessmenttarget.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/AssessmentTargetName" 5 | ], 6 | "description": "Resource Type definition for AWS::Inspector::AssessmentTarget", 7 | "handlers": { 8 | "create": { 9 | "permissions": [ 10 | "inspector:CreateAssessmentTarget", 11 | "inspector:ListAssessmentTargets", 12 | "inspector:DescribeAssessmentTargets" 13 | ] 14 | }, 15 | "delete": { 16 | "permissions": [ 17 | "inspector:DeleteAssessmentTarget" 18 | ] 19 | }, 20 | "list": { 21 | "permissions": [ 22 | "inspector:ListAssessmentTargets" 23 | ] 24 | }, 25 | "read": { 26 | "permissions": [ 27 | "inspector:DescribeAssessmentTargets" 28 | ] 29 | }, 30 | "update": { 31 | "permissions": [ 32 | "inspector:DescribeAssessmentTargets", 33 | "inspector:UpdateAssessmentTarget" 34 | ] 35 | } 36 | }, 37 | "primaryIdentifier": [ 38 | "/properties/Arn" 39 | ], 40 | "properties": { 41 | "Arn": { 42 | "type": "string" 43 | }, 44 | "AssessmentTargetName": { 45 | "type": "string" 46 | }, 47 | "ResourceGroupArn": { 48 | "type": "string" 49 | } 50 | }, 51 | "readOnlyProperties": [ 52 | "/properties/Arn" 53 | ], 54 | "taggable": false, 55 | "typeName": "AWS::Inspector::AssessmentTarget" 56 | } 57 | -------------------------------------------------------------------------------- /schema/aws-iot-policyprincipalattachment.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PolicyName", 5 | "/properties/Principal" 6 | ], 7 | "description": "Resource Type definition for AWS::IoT::PolicyPrincipalAttachment", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Id": { 13 | "type": "string" 14 | }, 15 | "PolicyName": { 16 | "type": "string" 17 | }, 18 | "Principal": { 19 | "type": "string" 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/Id" 24 | ], 25 | "required": [ 26 | "Principal", 27 | "PolicyName" 28 | ], 29 | "typeName": "AWS::IoT::PolicyPrincipalAttachment" 30 | } 31 | -------------------------------------------------------------------------------- /schema/aws-iot-thingprincipalattachment.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ThingName", 5 | "/properties/Principal" 6 | ], 7 | "description": "Resource Type definition for AWS::IoT::ThingPrincipalAttachment", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Id": { 13 | "type": "string" 14 | }, 15 | "Principal": { 16 | "type": "string" 17 | }, 18 | "ThingName": { 19 | "type": "string" 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/Id" 24 | ], 25 | "required": [ 26 | "Principal", 27 | "ThingName" 28 | ], 29 | "typeName": "AWS::IoT::ThingPrincipalAttachment" 30 | } 31 | -------------------------------------------------------------------------------- /schema/aws-iotthingsgraph-flowtemplate.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "definitions": { 4 | "DefinitionDocument": { 5 | "additionalProperties": false, 6 | "properties": { 7 | "Language": { 8 | "type": "string" 9 | }, 10 | "Text": { 11 | "type": "string" 12 | } 13 | }, 14 | "required": [ 15 | "Language", 16 | "Text" 17 | ], 18 | "type": "object" 19 | } 20 | }, 21 | "description": "Resource Type definition for AWS::IoTThingsGraph::FlowTemplate", 22 | "primaryIdentifier": [ 23 | "/properties/Id" 24 | ], 25 | "properties": { 26 | "CompatibleNamespaceVersion": { 27 | "type": "number" 28 | }, 29 | "Definition": { 30 | "$ref": "#/definitions/DefinitionDocument" 31 | }, 32 | "Id": { 33 | "type": "string" 34 | } 35 | }, 36 | "readOnlyProperties": [ 37 | "/properties/Id" 38 | ], 39 | "required": [ 40 | "Definition" 41 | ], 42 | "typeName": "AWS::IoTThingsGraph::FlowTemplate" 43 | } 44 | -------------------------------------------------------------------------------- /schema/aws-kinesis-streamconsumer.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ConsumerName", 5 | "/properties/StreamARN" 6 | ], 7 | "description": "Resource Type definition for AWS::Kinesis::StreamConsumer", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "ConsumerARN": { 13 | "type": "string" 14 | }, 15 | "ConsumerCreationTimestamp": { 16 | "type": "string" 17 | }, 18 | "ConsumerName": { 19 | "type": "string" 20 | }, 21 | "ConsumerStatus": { 22 | "type": "string" 23 | }, 24 | "Id": { 25 | "type": "string" 26 | }, 27 | "StreamARN": { 28 | "type": "string" 29 | } 30 | }, 31 | "readOnlyProperties": [ 32 | "/properties/ConsumerStatus", 33 | "/properties/ConsumerARN", 34 | "/properties/ConsumerCreationTimestamp", 35 | "/properties/Id" 36 | ], 37 | "required": [ 38 | "ConsumerName", 39 | "StreamARN" 40 | ], 41 | "typeName": "AWS::Kinesis::StreamConsumer" 42 | } 43 | -------------------------------------------------------------------------------- /schema/aws-kinesisanalyticsv2-applicationcloudwatchloggingoption.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationName" 5 | ], 6 | "definitions": { 7 | "CloudWatchLoggingOption": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "LogStreamARN": { 11 | "type": "string" 12 | } 13 | }, 14 | "required": [ 15 | "LogStreamARN" 16 | ], 17 | "type": "object" 18 | } 19 | }, 20 | "description": "Resource Type definition for AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption", 21 | "primaryIdentifier": [ 22 | "/properties/Id" 23 | ], 24 | "properties": { 25 | "ApplicationName": { 26 | "type": "string" 27 | }, 28 | "CloudWatchLoggingOption": { 29 | "$ref": "#/definitions/CloudWatchLoggingOption" 30 | }, 31 | "Id": { 32 | "type": "string" 33 | } 34 | }, 35 | "readOnlyProperties": [ 36 | "/properties/Id" 37 | ], 38 | "required": [ 39 | "CloudWatchLoggingOption", 40 | "ApplicationName" 41 | ], 42 | "typeName": "AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOption" 43 | } 44 | -------------------------------------------------------------------------------- /schema/aws-lakeformation-resource.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ResourceArn" 5 | ], 6 | "description": "Resource Type definition for AWS::LakeFormation::Resource", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "HybridAccessEnabled": { 12 | "type": "boolean" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "ResourceArn": { 18 | "type": "string" 19 | }, 20 | "RoleArn": { 21 | "type": "string" 22 | }, 23 | "UseServiceLinkedRole": { 24 | "type": "boolean" 25 | }, 26 | "WithFederation": { 27 | "type": "boolean" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "ResourceArn", 35 | "UseServiceLinkedRole" 36 | ], 37 | "typeName": "AWS::LakeFormation::Resource" 38 | } 39 | -------------------------------------------------------------------------------- /schema/aws-managedblockchain-node.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "definitions": { 4 | "NodeConfiguration": { 5 | "additionalProperties": false, 6 | "properties": { 7 | "AvailabilityZone": { 8 | "type": "string" 9 | }, 10 | "InstanceType": { 11 | "type": "string" 12 | } 13 | }, 14 | "required": [ 15 | "AvailabilityZone", 16 | "InstanceType" 17 | ], 18 | "type": "object" 19 | } 20 | }, 21 | "description": "Resource Type definition for AWS::ManagedBlockchain::Node", 22 | "primaryIdentifier": [ 23 | "/properties/NodeId" 24 | ], 25 | "properties": { 26 | "Arn": { 27 | "type": "string" 28 | }, 29 | "MemberId": { 30 | "type": "string" 31 | }, 32 | "NetworkId": { 33 | "type": "string" 34 | }, 35 | "NodeConfiguration": { 36 | "$ref": "#/definitions/NodeConfiguration" 37 | }, 38 | "NodeId": { 39 | "type": "string" 40 | } 41 | }, 42 | "readOnlyProperties": [ 43 | "/properties/NodeId", 44 | "/properties/Arn" 45 | ], 46 | "required": [ 47 | "NetworkId", 48 | "NodeConfiguration" 49 | ], 50 | "typeName": "AWS::ManagedBlockchain::Node" 51 | } 52 | -------------------------------------------------------------------------------- /schema/aws-mediaconvert-preset.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "description": "Resource Type definition for AWS::MediaConvert::Preset", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Arn": { 12 | "type": "string" 13 | }, 14 | "Category": { 15 | "type": "string" 16 | }, 17 | "Description": { 18 | "type": "string" 19 | }, 20 | "Id": { 21 | "type": "string" 22 | }, 23 | "Name": { 24 | "type": "string" 25 | }, 26 | "SettingsJson": { 27 | "type": "object" 28 | }, 29 | "Tags": { 30 | "type": "object" 31 | } 32 | }, 33 | "readOnlyProperties": [ 34 | "/properties/Id", 35 | "/properties/Arn" 36 | ], 37 | "required": [ 38 | "SettingsJson" 39 | ], 40 | "typeName": "AWS::MediaConvert::Preset" 41 | } 42 | -------------------------------------------------------------------------------- /schema/aws-mediaconvert-queue.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "description": "Resource Type definition for AWS::MediaConvert::Queue", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Arn": { 12 | "type": "string" 13 | }, 14 | "ConcurrentJobs": { 15 | "type": "integer" 16 | }, 17 | "Description": { 18 | "type": "string" 19 | }, 20 | "Id": { 21 | "type": "string" 22 | }, 23 | "Name": { 24 | "type": "string" 25 | }, 26 | "PricingPlan": { 27 | "type": "string" 28 | }, 29 | "Status": { 30 | "type": "string" 31 | }, 32 | "Tags": { 33 | "type": "object" 34 | } 35 | }, 36 | "readOnlyProperties": [ 37 | "/properties/Id", 38 | "/properties/Arn" 39 | ], 40 | "typeName": "AWS::MediaConvert::Queue" 41 | } 42 | -------------------------------------------------------------------------------- /schema/aws-medialive-inputsecuritygroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Tags" 5 | ], 6 | "definitions": { 7 | "InputWhitelistRuleCidr": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Cidr": { 11 | "type": "string" 12 | } 13 | }, 14 | "type": "object" 15 | } 16 | }, 17 | "description": "Resource Type definition for AWS::MediaLive::InputSecurityGroup", 18 | "primaryIdentifier": [ 19 | "/properties/Id" 20 | ], 21 | "properties": { 22 | "Arn": { 23 | "type": "string" 24 | }, 25 | "Id": { 26 | "type": "string" 27 | }, 28 | "Tags": { 29 | "type": "object" 30 | }, 31 | "WhitelistRules": { 32 | "items": { 33 | "$ref": "#/definitions/InputWhitelistRuleCidr" 34 | }, 35 | "type": "array", 36 | "uniqueItems": false 37 | } 38 | }, 39 | "readOnlyProperties": [ 40 | "/properties/Id", 41 | "/properties/Arn" 42 | ], 43 | "typeName": "AWS::MediaLive::InputSecurityGroup" 44 | } 45 | -------------------------------------------------------------------------------- /schema/aws-neptune-eventsubscription.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/SnsTopicArn" 5 | ], 6 | "description": "Resource Type definition for AWS::Neptune::EventSubscription", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Enabled": { 12 | "type": "boolean" 13 | }, 14 | "EventCategories": { 15 | "items": { 16 | "type": "string" 17 | }, 18 | "type": "array", 19 | "uniqueItems": false 20 | }, 21 | "Id": { 22 | "type": "string" 23 | }, 24 | "SnsTopicArn": { 25 | "type": "string" 26 | }, 27 | "SourceIds": { 28 | "items": { 29 | "type": "string" 30 | }, 31 | "type": "array", 32 | "uniqueItems": false 33 | }, 34 | "SourceType": { 35 | "type": "string" 36 | } 37 | }, 38 | "readOnlyProperties": [ 39 | "/properties/Id" 40 | ], 41 | "typeName": "AWS::Neptune::EventSubscription" 42 | } 43 | -------------------------------------------------------------------------------- /schema/aws-opsworks-elasticloadbalancerattachment.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::OpsWorks::ElasticLoadBalancerAttachment", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "ElasticLoadBalancerName": { 9 | "type": "string" 10 | }, 11 | "Id": { 12 | "type": "string" 13 | }, 14 | "LayerId": { 15 | "type": "string" 16 | } 17 | }, 18 | "readOnlyProperties": [ 19 | "/properties/Id" 20 | ], 21 | "required": [ 22 | "LayerId", 23 | "ElasticLoadBalancerName" 24 | ], 25 | "typeName": "AWS::OpsWorks::ElasticLoadBalancerAttachment" 26 | } 27 | -------------------------------------------------------------------------------- /schema/aws-opsworks-userprofile.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/IamUserArn" 5 | ], 6 | "description": "Resource Type definition for AWS::OpsWorks::UserProfile", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "AllowSelfManagement": { 12 | "type": "boolean" 13 | }, 14 | "IamUserArn": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "SshPublicKey": { 21 | "type": "string" 22 | }, 23 | "SshUsername": { 24 | "type": "string" 25 | } 26 | }, 27 | "readOnlyProperties": [ 28 | "/properties/Id" 29 | ], 30 | "required": [ 31 | "IamUserArn" 32 | ], 33 | "typeName": "AWS::OpsWorks::UserProfile" 34 | } 35 | -------------------------------------------------------------------------------- /schema/aws-opsworks-volume.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/StackId", 5 | "/properties/Ec2VolumeId" 6 | ], 7 | "description": "Resource Type definition for AWS::OpsWorks::Volume", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Ec2VolumeId": { 13 | "type": "string" 14 | }, 15 | "Id": { 16 | "type": "string" 17 | }, 18 | "MountPoint": { 19 | "type": "string" 20 | }, 21 | "Name": { 22 | "type": "string" 23 | }, 24 | "StackId": { 25 | "type": "string" 26 | } 27 | }, 28 | "readOnlyProperties": [ 29 | "/properties/Id" 30 | ], 31 | "required": [ 32 | "Ec2VolumeId", 33 | "StackId" 34 | ], 35 | "typeName": "AWS::OpsWorks::Volume" 36 | } 37 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-admchannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::ADMChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "ClientId": { 15 | "type": "string" 16 | }, 17 | "ClientSecret": { 18 | "type": "string" 19 | }, 20 | "Enabled": { 21 | "type": "boolean" 22 | }, 23 | "Id": { 24 | "type": "string" 25 | } 26 | }, 27 | "readOnlyProperties": [ 28 | "/properties/Id" 29 | ], 30 | "required": [ 31 | "ApplicationId", 32 | "ClientId", 33 | "ClientSecret" 34 | ], 35 | "typeName": "AWS::Pinpoint::ADMChannel" 36 | } 37 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-apnschannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::APNSChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "BundleId": { 15 | "type": "string" 16 | }, 17 | "Certificate": { 18 | "type": "string" 19 | }, 20 | "DefaultAuthenticationMethod": { 21 | "type": "string" 22 | }, 23 | "Enabled": { 24 | "type": "boolean" 25 | }, 26 | "Id": { 27 | "type": "string" 28 | }, 29 | "PrivateKey": { 30 | "type": "string" 31 | }, 32 | "TeamId": { 33 | "type": "string" 34 | }, 35 | "TokenKey": { 36 | "type": "string" 37 | }, 38 | "TokenKeyId": { 39 | "type": "string" 40 | } 41 | }, 42 | "readOnlyProperties": [ 43 | "/properties/Id" 44 | ], 45 | "required": [ 46 | "ApplicationId" 47 | ], 48 | "typeName": "AWS::Pinpoint::APNSChannel" 49 | } 50 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-apnssandboxchannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::APNSSandboxChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "BundleId": { 15 | "type": "string" 16 | }, 17 | "Certificate": { 18 | "type": "string" 19 | }, 20 | "DefaultAuthenticationMethod": { 21 | "type": "string" 22 | }, 23 | "Enabled": { 24 | "type": "boolean" 25 | }, 26 | "Id": { 27 | "type": "string" 28 | }, 29 | "PrivateKey": { 30 | "type": "string" 31 | }, 32 | "TeamId": { 33 | "type": "string" 34 | }, 35 | "TokenKey": { 36 | "type": "string" 37 | }, 38 | "TokenKeyId": { 39 | "type": "string" 40 | } 41 | }, 42 | "readOnlyProperties": [ 43 | "/properties/Id" 44 | ], 45 | "required": [ 46 | "ApplicationId" 47 | ], 48 | "typeName": "AWS::Pinpoint::APNSSandboxChannel" 49 | } 50 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-apnsvoipchannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::APNSVoipChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "BundleId": { 15 | "type": "string" 16 | }, 17 | "Certificate": { 18 | "type": "string" 19 | }, 20 | "DefaultAuthenticationMethod": { 21 | "type": "string" 22 | }, 23 | "Enabled": { 24 | "type": "boolean" 25 | }, 26 | "Id": { 27 | "type": "string" 28 | }, 29 | "PrivateKey": { 30 | "type": "string" 31 | }, 32 | "TeamId": { 33 | "type": "string" 34 | }, 35 | "TokenKey": { 36 | "type": "string" 37 | }, 38 | "TokenKeyId": { 39 | "type": "string" 40 | } 41 | }, 42 | "readOnlyProperties": [ 43 | "/properties/Id" 44 | ], 45 | "required": [ 46 | "ApplicationId" 47 | ], 48 | "typeName": "AWS::Pinpoint::APNSVoipChannel" 49 | } 50 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-apnsvoipsandboxchannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::APNSVoipSandboxChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "BundleId": { 15 | "type": "string" 16 | }, 17 | "Certificate": { 18 | "type": "string" 19 | }, 20 | "DefaultAuthenticationMethod": { 21 | "type": "string" 22 | }, 23 | "Enabled": { 24 | "type": "boolean" 25 | }, 26 | "Id": { 27 | "type": "string" 28 | }, 29 | "PrivateKey": { 30 | "type": "string" 31 | }, 32 | "TeamId": { 33 | "type": "string" 34 | }, 35 | "TokenKey": { 36 | "type": "string" 37 | }, 38 | "TokenKeyId": { 39 | "type": "string" 40 | } 41 | }, 42 | "readOnlyProperties": [ 43 | "/properties/Id" 44 | ], 45 | "required": [ 46 | "ApplicationId" 47 | ], 48 | "typeName": "AWS::Pinpoint::APNSVoipSandboxChannel" 49 | } 50 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-app.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::App", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Arn": { 12 | "type": "string" 13 | }, 14 | "Id": { 15 | "type": "string" 16 | }, 17 | "Name": { 18 | "type": "string" 19 | }, 20 | "Tags": { 21 | "type": "object" 22 | } 23 | }, 24 | "readOnlyProperties": [ 25 | "/properties/Arn", 26 | "/properties/Id" 27 | ], 28 | "required": [ 29 | "Name" 30 | ], 31 | "typeName": "AWS::Pinpoint::App" 32 | } 33 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-baiduchannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::BaiduChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApiKey": { 12 | "type": "string" 13 | }, 14 | "ApplicationId": { 15 | "type": "string" 16 | }, 17 | "Enabled": { 18 | "type": "boolean" 19 | }, 20 | "Id": { 21 | "type": "string" 22 | }, 23 | "SecretKey": { 24 | "type": "string" 25 | } 26 | }, 27 | "readOnlyProperties": [ 28 | "/properties/Id" 29 | ], 30 | "required": [ 31 | "ApplicationId", 32 | "SecretKey", 33 | "ApiKey" 34 | ], 35 | "typeName": "AWS::Pinpoint::BaiduChannel" 36 | } 37 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-emailchannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::EmailChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "ConfigurationSet": { 15 | "type": "string" 16 | }, 17 | "Enabled": { 18 | "type": "boolean" 19 | }, 20 | "FromAddress": { 21 | "type": "string" 22 | }, 23 | "Id": { 24 | "type": "string" 25 | }, 26 | "Identity": { 27 | "type": "string" 28 | }, 29 | "OrchestrationSendingRoleArn": { 30 | "type": "string" 31 | }, 32 | "RoleArn": { 33 | "type": "string" 34 | } 35 | }, 36 | "readOnlyProperties": [ 37 | "/properties/Id" 38 | ], 39 | "required": [ 40 | "FromAddress", 41 | "ApplicationId", 42 | "Identity" 43 | ], 44 | "typeName": "AWS::Pinpoint::EmailChannel" 45 | } 46 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-emailtemplate.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/TemplateName" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::EmailTemplate", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Arn": { 12 | "type": "string" 13 | }, 14 | "DefaultSubstitutions": { 15 | "type": "string" 16 | }, 17 | "HtmlPart": { 18 | "type": "string" 19 | }, 20 | "Id": { 21 | "type": "string" 22 | }, 23 | "Subject": { 24 | "type": "string" 25 | }, 26 | "Tags": { 27 | "type": "object" 28 | }, 29 | "TemplateDescription": { 30 | "type": "string" 31 | }, 32 | "TemplateName": { 33 | "type": "string" 34 | }, 35 | "TextPart": { 36 | "type": "string" 37 | } 38 | }, 39 | "readOnlyProperties": [ 40 | "/properties/Id", 41 | "/properties/Arn" 42 | ], 43 | "required": [ 44 | "TemplateName", 45 | "Subject" 46 | ], 47 | "typeName": "AWS::Pinpoint::EmailTemplate" 48 | } 49 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-eventstream.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::EventStream", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "DestinationStreamArn": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "RoleArn": { 21 | "type": "string" 22 | } 23 | }, 24 | "readOnlyProperties": [ 25 | "/properties/Id" 26 | ], 27 | "required": [ 28 | "ApplicationId", 29 | "DestinationStreamArn", 30 | "RoleArn" 31 | ], 32 | "typeName": "AWS::Pinpoint::EventStream" 33 | } 34 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-gcmchannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::GCMChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApiKey": { 12 | "type": "string" 13 | }, 14 | "ApplicationId": { 15 | "type": "string" 16 | }, 17 | "DefaultAuthenticationMethod": { 18 | "type": "string" 19 | }, 20 | "Enabled": { 21 | "type": "boolean" 22 | }, 23 | "Id": { 24 | "type": "string" 25 | }, 26 | "ServiceJson": { 27 | "type": "string" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "ApplicationId" 35 | ], 36 | "typeName": "AWS::Pinpoint::GCMChannel" 37 | } 38 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-smschannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::SMSChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "Enabled": { 15 | "type": "boolean" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "SenderId": { 21 | "type": "string" 22 | }, 23 | "ShortCode": { 24 | "type": "string" 25 | } 26 | }, 27 | "readOnlyProperties": [ 28 | "/properties/Id" 29 | ], 30 | "required": [ 31 | "ApplicationId" 32 | ], 33 | "typeName": "AWS::Pinpoint::SMSChannel" 34 | } 35 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-smstemplate.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/TemplateName" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::SmsTemplate", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Arn": { 12 | "type": "string" 13 | }, 14 | "Body": { 15 | "type": "string" 16 | }, 17 | "DefaultSubstitutions": { 18 | "type": "string" 19 | }, 20 | "Id": { 21 | "type": "string" 22 | }, 23 | "Tags": { 24 | "type": "object" 25 | }, 26 | "TemplateDescription": { 27 | "type": "string" 28 | }, 29 | "TemplateName": { 30 | "type": "string" 31 | } 32 | }, 33 | "readOnlyProperties": [ 34 | "/properties/Id", 35 | "/properties/Arn" 36 | ], 37 | "required": [ 38 | "TemplateName", 39 | "Body" 40 | ], 41 | "typeName": "AWS::Pinpoint::SmsTemplate" 42 | } 43 | -------------------------------------------------------------------------------- /schema/aws-pinpoint-voicechannel.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ApplicationId" 5 | ], 6 | "description": "Resource Type definition for AWS::Pinpoint::VoiceChannel", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "ApplicationId": { 12 | "type": "string" 13 | }, 14 | "Enabled": { 15 | "type": "boolean" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | } 20 | }, 21 | "readOnlyProperties": [ 22 | "/properties/Id" 23 | ], 24 | "required": [ 25 | "ApplicationId" 26 | ], 27 | "typeName": "AWS::Pinpoint::VoiceChannel" 28 | } 29 | -------------------------------------------------------------------------------- /schema/aws-pinpointemail-dedicatedippool.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PoolName" 5 | ], 6 | "definitions": { 7 | "Tags": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Key": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "type": "object" 18 | } 19 | }, 20 | "description": "Resource Type definition for AWS::PinpointEmail::DedicatedIpPool", 21 | "primaryIdentifier": [ 22 | "/properties/Id" 23 | ], 24 | "properties": { 25 | "Id": { 26 | "type": "string" 27 | }, 28 | "PoolName": { 29 | "type": "string" 30 | }, 31 | "Tags": { 32 | "items": { 33 | "$ref": "#/definitions/Tags" 34 | }, 35 | "type": "array", 36 | "uniqueItems": false 37 | } 38 | }, 39 | "readOnlyProperties": [ 40 | "/properties/Id" 41 | ], 42 | "typeName": "AWS::PinpointEmail::DedicatedIpPool" 43 | } 44 | -------------------------------------------------------------------------------- /schema/aws-qldb-ledger.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "definitions": { 7 | "Tag": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Key": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Key" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::QLDB::Ledger", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "DeletionProtection": { 30 | "type": "boolean" 31 | }, 32 | "Id": { 33 | "type": "string" 34 | }, 35 | "KmsKey": { 36 | "type": "string" 37 | }, 38 | "Name": { 39 | "type": "string" 40 | }, 41 | "PermissionsMode": { 42 | "type": "string" 43 | }, 44 | "Tags": { 45 | "items": { 46 | "$ref": "#/definitions/Tag" 47 | }, 48 | "type": "array", 49 | "uniqueItems": false 50 | } 51 | }, 52 | "readOnlyProperties": [ 53 | "/properties/Id" 54 | ], 55 | "required": [ 56 | "PermissionsMode" 57 | ], 58 | "typeName": "AWS::QLDB::Ledger" 59 | } 60 | -------------------------------------------------------------------------------- /schema/aws-rds-dbsecuritygroupingress.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::RDS::DBSecurityGroupIngress", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "CIDRIP": { 9 | "type": "string" 10 | }, 11 | "DBSecurityGroupName": { 12 | "type": "string" 13 | }, 14 | "EC2SecurityGroupId": { 15 | "type": "string" 16 | }, 17 | "EC2SecurityGroupName": { 18 | "type": "string" 19 | }, 20 | "EC2SecurityGroupOwnerId": { 21 | "type": "string" 22 | }, 23 | "Id": { 24 | "type": "string" 25 | } 26 | }, 27 | "readOnlyProperties": [ 28 | "/properties/Id" 29 | ], 30 | "required": [ 31 | "DBSecurityGroupName" 32 | ], 33 | "typeName": "AWS::RDS::DBSecurityGroupIngress" 34 | } 35 | -------------------------------------------------------------------------------- /schema/aws-redshift-clustersecuritygroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Description" 5 | ], 6 | "definitions": { 7 | "Tag": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Key": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Key" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::Redshift::ClusterSecurityGroup", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "Description": { 30 | "type": "string" 31 | }, 32 | "Id": { 33 | "type": "string" 34 | }, 35 | "Tags": { 36 | "items": { 37 | "$ref": "#/definitions/Tag" 38 | }, 39 | "type": "array", 40 | "uniqueItems": false 41 | } 42 | }, 43 | "readOnlyProperties": [ 44 | "/properties/Id" 45 | ], 46 | "required": [ 47 | "Description" 48 | ], 49 | "typeName": "AWS::Redshift::ClusterSecurityGroup" 50 | } 51 | -------------------------------------------------------------------------------- /schema/aws-redshift-clustersecuritygroupingress.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ClusterSecurityGroupName", 5 | "/properties/CIDRIP", 6 | "/properties/EC2SecurityGroupOwnerId", 7 | "/properties/EC2SecurityGroupName" 8 | ], 9 | "description": "Resource Type definition for AWS::Redshift::ClusterSecurityGroupIngress", 10 | "primaryIdentifier": [ 11 | "/properties/Id" 12 | ], 13 | "properties": { 14 | "CIDRIP": { 15 | "type": "string" 16 | }, 17 | "ClusterSecurityGroupName": { 18 | "type": "string" 19 | }, 20 | "EC2SecurityGroupName": { 21 | "type": "string" 22 | }, 23 | "EC2SecurityGroupOwnerId": { 24 | "type": "string" 25 | }, 26 | "Id": { 27 | "type": "string" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "ClusterSecurityGroupName" 35 | ], 36 | "typeName": "AWS::Redshift::ClusterSecurityGroupIngress" 37 | } 38 | -------------------------------------------------------------------------------- /schema/aws-sagemaker-notebookinstancelifecycleconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/NotebookInstanceLifecycleConfigName" 5 | ], 6 | "definitions": { 7 | "NotebookInstanceLifecycleHook": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Content": { 11 | "type": "string" 12 | } 13 | }, 14 | "type": "object" 15 | } 16 | }, 17 | "description": "Resource Type definition for AWS::SageMaker::NotebookInstanceLifecycleConfig", 18 | "primaryIdentifier": [ 19 | "/properties/Id" 20 | ], 21 | "properties": { 22 | "Id": { 23 | "type": "string" 24 | }, 25 | "NotebookInstanceLifecycleConfigName": { 26 | "type": "string" 27 | }, 28 | "OnCreate": { 29 | "items": { 30 | "$ref": "#/definitions/NotebookInstanceLifecycleHook" 31 | }, 32 | "type": "array", 33 | "uniqueItems": false 34 | }, 35 | "OnStart": { 36 | "items": { 37 | "$ref": "#/definitions/NotebookInstanceLifecycleHook" 38 | }, 39 | "type": "array", 40 | "uniqueItems": false 41 | } 42 | }, 43 | "readOnlyProperties": [ 44 | "/properties/Id" 45 | ], 46 | "typeName": "AWS::SageMaker::NotebookInstanceLifecycleConfig" 47 | } 48 | -------------------------------------------------------------------------------- /schema/aws-sdb-domain.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "description": "Resource Type definition for AWS::SDB::Domain", 4 | "primaryIdentifier": [ 5 | "/properties/Id" 6 | ], 7 | "properties": { 8 | "Description": { 9 | "type": "string" 10 | }, 11 | "Id": { 12 | "type": "string" 13 | } 14 | }, 15 | "readOnlyProperties": [ 16 | "/properties/Id" 17 | ], 18 | "typeName": "AWS::SDB::Domain" 19 | } 20 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-acceptedportfolioshare.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PortfolioId", 5 | "/properties/AcceptLanguage" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceCatalog::AcceptedPortfolioShare", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "AcceptLanguage": { 13 | "type": "string" 14 | }, 15 | "Id": { 16 | "type": "string" 17 | }, 18 | "PortfolioId": { 19 | "type": "string" 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/Id" 24 | ], 25 | "required": [ 26 | "PortfolioId" 27 | ], 28 | "typeName": "AWS::ServiceCatalog::AcceptedPortfolioShare" 29 | } 30 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-launchnotificationconstraint.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PortfolioId", 5 | "/properties/ProductId" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceCatalog::LaunchNotificationConstraint", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "AcceptLanguage": { 13 | "type": "string" 14 | }, 15 | "Description": { 16 | "type": "string" 17 | }, 18 | "Id": { 19 | "type": "string" 20 | }, 21 | "NotificationArns": { 22 | "items": { 23 | "type": "string" 24 | }, 25 | "type": "array", 26 | "uniqueItems": false 27 | }, 28 | "PortfolioId": { 29 | "type": "string" 30 | }, 31 | "ProductId": { 32 | "type": "string" 33 | } 34 | }, 35 | "readOnlyProperties": [ 36 | "/properties/Id" 37 | ], 38 | "required": [ 39 | "NotificationArns", 40 | "PortfolioId", 41 | "ProductId" 42 | ], 43 | "typeName": "AWS::ServiceCatalog::LaunchNotificationConstraint" 44 | } 45 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-launchroleconstraint.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PortfolioId", 5 | "/properties/ProductId" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceCatalog::LaunchRoleConstraint", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "AcceptLanguage": { 13 | "type": "string" 14 | }, 15 | "Description": { 16 | "type": "string" 17 | }, 18 | "Id": { 19 | "type": "string" 20 | }, 21 | "LocalRoleName": { 22 | "type": "string" 23 | }, 24 | "PortfolioId": { 25 | "type": "string" 26 | }, 27 | "ProductId": { 28 | "type": "string" 29 | }, 30 | "RoleArn": { 31 | "type": "string" 32 | } 33 | }, 34 | "readOnlyProperties": [ 35 | "/properties/Id" 36 | ], 37 | "required": [ 38 | "PortfolioId", 39 | "ProductId" 40 | ], 41 | "typeName": "AWS::ServiceCatalog::LaunchRoleConstraint" 42 | } 43 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-launchtemplateconstraint.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PortfolioId", 5 | "/properties/ProductId" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceCatalog::LaunchTemplateConstraint", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "AcceptLanguage": { 13 | "type": "string" 14 | }, 15 | "Description": { 16 | "type": "string" 17 | }, 18 | "Id": { 19 | "type": "string" 20 | }, 21 | "PortfolioId": { 22 | "type": "string" 23 | }, 24 | "ProductId": { 25 | "type": "string" 26 | }, 27 | "Rules": { 28 | "type": "string" 29 | } 30 | }, 31 | "readOnlyProperties": [ 32 | "/properties/Id" 33 | ], 34 | "required": [ 35 | "PortfolioId", 36 | "ProductId", 37 | "Rules" 38 | ], 39 | "typeName": "AWS::ServiceCatalog::LaunchTemplateConstraint" 40 | } 41 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-portfolio.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "definitions": { 4 | "Tag": { 5 | "additionalProperties": false, 6 | "properties": { 7 | "Key": { 8 | "type": "string" 9 | }, 10 | "Value": { 11 | "type": "string" 12 | } 13 | }, 14 | "required": [ 15 | "Value", 16 | "Key" 17 | ], 18 | "type": "object" 19 | } 20 | }, 21 | "description": "Resource Type definition for AWS::ServiceCatalog::Portfolio", 22 | "primaryIdentifier": [ 23 | "/properties/Id" 24 | ], 25 | "properties": { 26 | "AcceptLanguage": { 27 | "type": "string" 28 | }, 29 | "Description": { 30 | "type": "string" 31 | }, 32 | "DisplayName": { 33 | "type": "string" 34 | }, 35 | "Id": { 36 | "type": "string" 37 | }, 38 | "PortfolioName": { 39 | "type": "string" 40 | }, 41 | "ProviderName": { 42 | "type": "string" 43 | }, 44 | "Tags": { 45 | "items": { 46 | "$ref": "#/definitions/Tag" 47 | }, 48 | "type": "array", 49 | "uniqueItems": false 50 | } 51 | }, 52 | "readOnlyProperties": [ 53 | "/properties/PortfolioName", 54 | "/properties/Id" 55 | ], 56 | "required": [ 57 | "DisplayName", 58 | "ProviderName" 59 | ], 60 | "typeName": "AWS::ServiceCatalog::Portfolio" 61 | } 62 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-portfolioprincipalassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PortfolioId", 5 | "/properties/AcceptLanguage", 6 | "/properties/PrincipalARN", 7 | "/properties/PrincipalType" 8 | ], 9 | "description": "Resource Type definition for AWS::ServiceCatalog::PortfolioPrincipalAssociation", 10 | "primaryIdentifier": [ 11 | "/properties/Id" 12 | ], 13 | "properties": { 14 | "AcceptLanguage": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "PortfolioId": { 21 | "type": "string" 22 | }, 23 | "PrincipalARN": { 24 | "type": "string" 25 | }, 26 | "PrincipalType": { 27 | "type": "string" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "PortfolioId", 35 | "PrincipalType", 36 | "PrincipalARN" 37 | ], 38 | "typeName": "AWS::ServiceCatalog::PortfolioPrincipalAssociation" 39 | } 40 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-portfolioproductassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/SourcePortfolioId", 5 | "/properties/PortfolioId", 6 | "/properties/AcceptLanguage", 7 | "/properties/ProductId" 8 | ], 9 | "description": "Resource Type definition for AWS::ServiceCatalog::PortfolioProductAssociation", 10 | "primaryIdentifier": [ 11 | "/properties/Id" 12 | ], 13 | "properties": { 14 | "AcceptLanguage": { 15 | "type": "string" 16 | }, 17 | "Id": { 18 | "type": "string" 19 | }, 20 | "PortfolioId": { 21 | "type": "string" 22 | }, 23 | "ProductId": { 24 | "type": "string" 25 | }, 26 | "SourcePortfolioId": { 27 | "type": "string" 28 | } 29 | }, 30 | "readOnlyProperties": [ 31 | "/properties/Id" 32 | ], 33 | "required": [ 34 | "PortfolioId", 35 | "ProductId" 36 | ], 37 | "typeName": "AWS::ServiceCatalog::PortfolioProductAssociation" 38 | } 39 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-portfolioshare.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/AcceptLanguage", 5 | "/properties/AccountId", 6 | "/properties/PortfolioId" 7 | ], 8 | "description": "Resource Type definition for AWS::ServiceCatalog::PortfolioShare", 9 | "primaryIdentifier": [ 10 | "/properties/Id" 11 | ], 12 | "properties": { 13 | "AcceptLanguage": { 14 | "type": "string" 15 | }, 16 | "AccountId": { 17 | "type": "string" 18 | }, 19 | "Id": { 20 | "type": "string" 21 | }, 22 | "PortfolioId": { 23 | "type": "string" 24 | }, 25 | "ShareTagOptions": { 26 | "type": "boolean" 27 | } 28 | }, 29 | "readOnlyProperties": [ 30 | "/properties/Id" 31 | ], 32 | "required": [ 33 | "AccountId", 34 | "PortfolioId" 35 | ], 36 | "typeName": "AWS::ServiceCatalog::PortfolioShare" 37 | } 38 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-resourceupdateconstraint.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/PortfolioId", 5 | "/properties/ProductId" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceCatalog::ResourceUpdateConstraint", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "AcceptLanguage": { 13 | "type": "string" 14 | }, 15 | "Description": { 16 | "type": "string" 17 | }, 18 | "Id": { 19 | "type": "string" 20 | }, 21 | "PortfolioId": { 22 | "type": "string" 23 | }, 24 | "ProductId": { 25 | "type": "string" 26 | }, 27 | "TagUpdateOnProvisionedProduct": { 28 | "type": "string" 29 | } 30 | }, 31 | "readOnlyProperties": [ 32 | "/properties/Id" 33 | ], 34 | "required": [ 35 | "TagUpdateOnProvisionedProduct", 36 | "PortfolioId", 37 | "ProductId" 38 | ], 39 | "typeName": "AWS::ServiceCatalog::ResourceUpdateConstraint" 40 | } 41 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-tagoption.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Value", 5 | "/properties/Key" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceCatalog::TagOption", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Active": { 13 | "type": "boolean" 14 | }, 15 | "Id": { 16 | "type": "string" 17 | }, 18 | "Key": { 19 | "type": "string" 20 | }, 21 | "Value": { 22 | "type": "string" 23 | } 24 | }, 25 | "readOnlyProperties": [ 26 | "/properties/Id" 27 | ], 28 | "required": [ 29 | "Value", 30 | "Key" 31 | ], 32 | "typeName": "AWS::ServiceCatalog::TagOption" 33 | } 34 | -------------------------------------------------------------------------------- /schema/aws-servicecatalog-tagoptionassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/TagOptionId", 5 | "/properties/ResourceId" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceCatalog::TagOptionAssociation", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Id": { 13 | "type": "string" 14 | }, 15 | "ResourceId": { 16 | "type": "string" 17 | }, 18 | "TagOptionId": { 19 | "type": "string" 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/Id" 24 | ], 25 | "required": [ 26 | "TagOptionId", 27 | "ResourceId" 28 | ], 29 | "typeName": "AWS::ServiceCatalog::TagOptionAssociation" 30 | } 31 | -------------------------------------------------------------------------------- /schema/aws-servicediscovery-httpnamespace.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "definitions": { 7 | "Tag": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Key": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Key" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::ServiceDiscovery::HttpNamespace", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "Arn": { 30 | "type": "string" 31 | }, 32 | "Description": { 33 | "type": "string" 34 | }, 35 | "Id": { 36 | "type": "string" 37 | }, 38 | "Name": { 39 | "type": "string" 40 | }, 41 | "Tags": { 42 | "items": { 43 | "$ref": "#/definitions/Tag" 44 | }, 45 | "type": "array", 46 | "uniqueItems": false 47 | } 48 | }, 49 | "readOnlyProperties": [ 50 | "/properties/Id", 51 | "/properties/Arn" 52 | ], 53 | "required": [ 54 | "Name" 55 | ], 56 | "typeName": "AWS::ServiceDiscovery::HttpNamespace" 57 | } 58 | -------------------------------------------------------------------------------- /schema/aws-servicediscovery-instance.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/InstanceId", 5 | "/properties/ServiceId" 6 | ], 7 | "description": "Resource Type definition for AWS::ServiceDiscovery::Instance", 8 | "primaryIdentifier": [ 9 | "/properties/InstanceId" 10 | ], 11 | "properties": { 12 | "InstanceAttributes": { 13 | "type": "object" 14 | }, 15 | "InstanceId": { 16 | "type": "string" 17 | }, 18 | "ServiceId": { 19 | "type": "string" 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/InstanceId" 24 | ], 25 | "required": [ 26 | "InstanceAttributes", 27 | "ServiceId" 28 | ], 29 | "typeName": "AWS::ServiceDiscovery::Instance" 30 | } 31 | -------------------------------------------------------------------------------- /schema/aws-ses-receiptfilter.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Filter" 5 | ], 6 | "definitions": { 7 | "Filter": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "IpFilter": { 11 | "$ref": "#/definitions/IpFilter" 12 | }, 13 | "Name": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "IpFilter" 19 | ], 20 | "type": "object" 21 | }, 22 | "IpFilter": { 23 | "additionalProperties": false, 24 | "properties": { 25 | "Cidr": { 26 | "type": "string" 27 | }, 28 | "Policy": { 29 | "type": "string" 30 | } 31 | }, 32 | "required": [ 33 | "Policy", 34 | "Cidr" 35 | ], 36 | "type": "object" 37 | } 38 | }, 39 | "description": "Resource Type definition for AWS::SES::ReceiptFilter", 40 | "primaryIdentifier": [ 41 | "/properties/Id" 42 | ], 43 | "properties": { 44 | "Filter": { 45 | "$ref": "#/definitions/Filter" 46 | }, 47 | "Id": { 48 | "type": "string" 49 | } 50 | }, 51 | "readOnlyProperties": [ 52 | "/properties/Id" 53 | ], 54 | "required": [ 55 | "Filter" 56 | ], 57 | "typeName": "AWS::SES::ReceiptFilter" 58 | } 59 | -------------------------------------------------------------------------------- /schema/aws-ses-receiptruleset.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/RuleSetName" 5 | ], 6 | "description": "Resource Type definition for AWS::SES::ReceiptRuleSet", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Id": { 12 | "type": "string" 13 | }, 14 | "RuleSetName": { 15 | "type": "string" 16 | } 17 | }, 18 | "readOnlyProperties": [ 19 | "/properties/Id" 20 | ], 21 | "typeName": "AWS::SES::ReceiptRuleSet" 22 | } 23 | -------------------------------------------------------------------------------- /schema/aws-waf-ipset.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "definitions": { 7 | "IPSetDescriptor": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Type": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Type" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::WAF::IPSet", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "IPSetDescriptors": { 30 | "items": { 31 | "$ref": "#/definitions/IPSetDescriptor" 32 | }, 33 | "type": "array", 34 | "uniqueItems": true 35 | }, 36 | "Id": { 37 | "type": "string" 38 | }, 39 | "Name": { 40 | "type": "string" 41 | } 42 | }, 43 | "readOnlyProperties": [ 44 | "/properties/Id" 45 | ], 46 | "required": [ 47 | "Name" 48 | ], 49 | "typeName": "AWS::WAF::IPSet" 50 | } 51 | -------------------------------------------------------------------------------- /schema/aws-waf-rule.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/MetricName", 5 | "/properties/Name" 6 | ], 7 | "definitions": { 8 | "Predicate": { 9 | "additionalProperties": false, 10 | "properties": { 11 | "DataId": { 12 | "type": "string" 13 | }, 14 | "Negated": { 15 | "type": "boolean" 16 | }, 17 | "Type": { 18 | "type": "string" 19 | } 20 | }, 21 | "required": [ 22 | "Negated", 23 | "Type", 24 | "DataId" 25 | ], 26 | "type": "object" 27 | } 28 | }, 29 | "description": "Resource Type definition for AWS::WAF::Rule", 30 | "primaryIdentifier": [ 31 | "/properties/Id" 32 | ], 33 | "properties": { 34 | "Id": { 35 | "type": "string" 36 | }, 37 | "MetricName": { 38 | "type": "string" 39 | }, 40 | "Name": { 41 | "type": "string" 42 | }, 43 | "Predicates": { 44 | "items": { 45 | "$ref": "#/definitions/Predicate" 46 | }, 47 | "type": "array", 48 | "uniqueItems": true 49 | } 50 | }, 51 | "readOnlyProperties": [ 52 | "/properties/Id" 53 | ], 54 | "required": [ 55 | "MetricName", 56 | "Name" 57 | ], 58 | "typeName": "AWS::WAF::Rule" 59 | } 60 | -------------------------------------------------------------------------------- /schema/aws-wafregional-geomatchset.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "definitions": { 7 | "GeoMatchConstraint": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Type": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Type" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::WAFRegional::GeoMatchSet", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "GeoMatchConstraints": { 30 | "items": { 31 | "$ref": "#/definitions/GeoMatchConstraint" 32 | }, 33 | "type": "array", 34 | "uniqueItems": false 35 | }, 36 | "Id": { 37 | "type": "string" 38 | }, 39 | "Name": { 40 | "type": "string" 41 | } 42 | }, 43 | "readOnlyProperties": [ 44 | "/properties/Id" 45 | ], 46 | "required": [ 47 | "Name" 48 | ], 49 | "typeName": "AWS::WAFRegional::GeoMatchSet" 50 | } 51 | -------------------------------------------------------------------------------- /schema/aws-wafregional-ipset.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "definitions": { 7 | "IPSetDescriptor": { 8 | "additionalProperties": false, 9 | "properties": { 10 | "Type": { 11 | "type": "string" 12 | }, 13 | "Value": { 14 | "type": "string" 15 | } 16 | }, 17 | "required": [ 18 | "Value", 19 | "Type" 20 | ], 21 | "type": "object" 22 | } 23 | }, 24 | "description": "Resource Type definition for AWS::WAFRegional::IPSet", 25 | "primaryIdentifier": [ 26 | "/properties/Id" 27 | ], 28 | "properties": { 29 | "IPSetDescriptors": { 30 | "items": { 31 | "$ref": "#/definitions/IPSetDescriptor" 32 | }, 33 | "type": "array", 34 | "uniqueItems": false 35 | }, 36 | "Id": { 37 | "type": "string" 38 | }, 39 | "Name": { 40 | "type": "string" 41 | } 42 | }, 43 | "readOnlyProperties": [ 44 | "/properties/Id" 45 | ], 46 | "required": [ 47 | "Name" 48 | ], 49 | "typeName": "AWS::WAFRegional::IPSet" 50 | } 51 | -------------------------------------------------------------------------------- /schema/aws-wafregional-regexpatternset.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/Name" 5 | ], 6 | "description": "Resource Type definition for AWS::WAFRegional::RegexPatternSet", 7 | "primaryIdentifier": [ 8 | "/properties/Id" 9 | ], 10 | "properties": { 11 | "Id": { 12 | "type": "string" 13 | }, 14 | "Name": { 15 | "type": "string" 16 | }, 17 | "RegexPatternStrings": { 18 | "items": { 19 | "type": "string" 20 | }, 21 | "type": "array", 22 | "uniqueItems": false 23 | } 24 | }, 25 | "readOnlyProperties": [ 26 | "/properties/Id" 27 | ], 28 | "required": [ 29 | "RegexPatternStrings", 30 | "Name" 31 | ], 32 | "typeName": "AWS::WAFRegional::RegexPatternSet" 33 | } 34 | -------------------------------------------------------------------------------- /schema/aws-wafregional-rule.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/MetricName", 5 | "/properties/Name" 6 | ], 7 | "definitions": { 8 | "Predicate": { 9 | "additionalProperties": false, 10 | "properties": { 11 | "DataId": { 12 | "type": "string" 13 | }, 14 | "Negated": { 15 | "type": "boolean" 16 | }, 17 | "Type": { 18 | "type": "string" 19 | } 20 | }, 21 | "required": [ 22 | "Type", 23 | "Negated", 24 | "DataId" 25 | ], 26 | "type": "object" 27 | } 28 | }, 29 | "description": "Resource Type definition for AWS::WAFRegional::Rule", 30 | "primaryIdentifier": [ 31 | "/properties/Id" 32 | ], 33 | "properties": { 34 | "Id": { 35 | "type": "string" 36 | }, 37 | "MetricName": { 38 | "type": "string" 39 | }, 40 | "Name": { 41 | "type": "string" 42 | }, 43 | "Predicates": { 44 | "items": { 45 | "$ref": "#/definitions/Predicate" 46 | }, 47 | "type": "array", 48 | "uniqueItems": false 49 | } 50 | }, 51 | "readOnlyProperties": [ 52 | "/properties/Id" 53 | ], 54 | "required": [ 55 | "MetricName", 56 | "Name" 57 | ], 58 | "typeName": "AWS::WAFRegional::Rule" 59 | } 60 | -------------------------------------------------------------------------------- /schema/aws-wafregional-webaclassociation.json: -------------------------------------------------------------------------------- 1 | { 2 | "additionalProperties": false, 3 | "createOnlyProperties": [ 4 | "/properties/ResourceArn", 5 | "/properties/WebACLId" 6 | ], 7 | "description": "Resource Type definition for AWS::WAFRegional::WebACLAssociation", 8 | "primaryIdentifier": [ 9 | "/properties/Id" 10 | ], 11 | "properties": { 12 | "Id": { 13 | "type": "string" 14 | }, 15 | "ResourceArn": { 16 | "type": "string" 17 | }, 18 | "WebACLId": { 19 | "type": "string" 20 | } 21 | }, 22 | "readOnlyProperties": [ 23 | "/properties/Id" 24 | ], 25 | "required": [ 26 | "ResourceArn", 27 | "WebACLId" 28 | ], 29 | "typeName": "AWS::WAFRegional::WebACLAssociation" 30 | } 31 | -------------------------------------------------------------------------------- /schema/update.ps1: -------------------------------------------------------------------------------- 1 | Add-Type -AssemblyName System.IO.Compression.FileSystem 2 | function Unzip { 3 | param( 4 | [Parameter(Mandatory=$true)] 5 | [ValidateNotNullOrEmpty()] 6 | [string]$zipfile, 7 | 8 | [Parameter(Mandatory=$true)] 9 | [ValidateNotNullOrEmpty()] 10 | [string]$outpath 11 | ) 12 | 13 | [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath) 14 | } 15 | 16 | $root = "./"| Resolve-Path 17 | $schemaUrl = "https://schema.cloudformation.us-east-1.amazonaws.com/CloudformationSchema.zip" 18 | $filepath = Join-Path $root "CloudformationSchema.zip" 19 | write-host "path $filepath" 20 | Get-ChildItem *.json| ForEach-Object { Remove-Item $_} 21 | 22 | try { 23 | Write-Progress -Activity "Downloading Schema" -Status "Downloading..." 24 | invoke-webrequest $schemaUrl -OutFile $filepath 25 | Write-Progress -Activity "Downloading Schema" -Completed 26 | Unzip $filepath $root 27 | } catch { 28 | Write-Error "Failed to download/extract schema: $_" 29 | exit 1 30 | } 31 | 32 | Remove-Item $filepath 33 | 34 | [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 35 | -------------------------------------------------------------------------------- /schema/update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Set working directory 4 | ROOT_DIR="$(pwd)" 5 | SCHEMA_URL="https://schema.cloudformation.us-east-1.amazonaws.com/CloudformationSchema.zip" 6 | FILEPATH="${ROOT_DIR}/CloudformationSchema.zip" 7 | 8 | # Function to cleanup on exit 9 | cleanup() { 10 | rm -f "${FILEPATH}" 11 | } 12 | 13 | # Error handling 14 | set -e 15 | trap cleanup EXIT 16 | 17 | # Remove existing JSON files 18 | rm -f ./*.json 19 | 20 | # Download schema 21 | echo "Downloading schema..." 22 | curl -L -o "${FILEPATH}" "${SCHEMA_URL}" || { 23 | echo "Failed to download schema" 24 | exit 1 25 | } 26 | 27 | # Extract zip file 28 | echo "Extracting schema..." 29 | unzip -o "${FILEPATH}" || { 30 | echo "Failed to extract schema" 31 | exit 1 32 | } 33 | -------------------------------------------------------------------------------- /set-version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # set-version.sh: Updates version.go file with latest git tag 3 | # Usage: ./set-version.sh 4 | # Requires: git 5 | set -e # Exit on error 6 | 7 | if ! latesttag=$(git describe --tags); then 8 | echo "Error: Failed to get git tag" >&2 9 | exit 1 10 | fi 11 | 12 | if [ -z "$latesttag" ]; then 13 | echo "Error: No git tags found" >&2 14 | exit 1 15 | fi 16 | 17 | if ! echo "$latesttag" | grep -Eq '^v[0-9]+\.[0-9]+\.[0-9]+'; then 18 | echo "Error: Invalid version tag format" >&2 19 | exit 1 20 | fi 21 | 22 | echo "Updating version file with new tag: $latesttag" 23 | echo "package version" > src/version/version.go 24 | echo "" >> src/version/version.go 25 | echo "const Version = \"$latesttag\"" >> src/version/version.go 26 | -------------------------------------------------------------------------------- /src/arm/data.go: -------------------------------------------------------------------------------- 1 | package arm 2 | 3 | import ( 4 | "bytes" 5 | "sato/src/cf" 6 | tftemplate "text/template" 7 | ) 8 | 9 | // ParseData writes out to data.tf. 10 | func ParseData(result map[string]interface{}, funcMap tftemplate.FuncMap, destination string) error { 11 | 12 | if result["data"] == nil { 13 | return nil 14 | } 15 | 16 | data := result["data"] 17 | 18 | var output bytes.Buffer 19 | 20 | tmpl, err := tftemplate.New("test").Funcs(funcMap).Parse(string(dataFile)) 21 | if err != nil { 22 | return &templateNewError{err: err} 23 | } 24 | 25 | err = tmpl.Execute(&output, m{ 26 | "data": data, 27 | }) 28 | 29 | if err != nil { 30 | return &templateExecuteError{err: err} 31 | } 32 | 33 | err = cf.Write(output.String(), destination, "data") 34 | if err != nil { 35 | return &writeFileError{destination: destination, err: err} 36 | } 37 | 38 | return nil 39 | } 40 | -------------------------------------------------------------------------------- /src/arm/data.template: -------------------------------------------------------------------------------- 1 | {{- if eq true .data.resource_group }} 2 | data "azurerm_resource_group" "sato" { 3 | name = "sato" 4 | } 5 | {{- end }} 6 | {{- if eq true .data.client_config }} 7 | data "azurerm_client_config" "sato" { 8 | } 9 | {{- end }} 10 | {{- if .data.uuid }} 11 | {{Uuid .data.uuid }} 12 | {{- end }} 13 | provider "azurerm" { 14 | features{} 15 | } 16 | -------------------------------------------------------------------------------- /src/arm/data_test.go: -------------------------------------------------------------------------------- 1 | package arm_test 2 | 3 | import ( 4 | "testing" 5 | "text/template" 6 | 7 | "sato/src/arm" 8 | ) 9 | 10 | func Test_parseData(t *testing.T) { 11 | t.Parallel() 12 | 13 | type args struct { 14 | result map[string]interface{} 15 | funcMap template.FuncMap 16 | destination string 17 | } 18 | 19 | var badFunk template.FuncMap 20 | 21 | empty := make(map[string]interface{}) 22 | emptyData := make(map[string]interface{}) 23 | emptyData["data"] = make(map[string]interface{}) 24 | 25 | results := make(map[string]interface{}) 26 | data := make(map[string]interface{}) 27 | 28 | data["resource_group"] = true 29 | results["data"] = data 30 | 31 | tests := []struct { 32 | name string 33 | args args 34 | wantErr bool 35 | }{ 36 | {"empty", args{empty, funcMap, "test-output"}, false}, 37 | {"emptyData", args{emptyData, funcMap, "test-output"}, false}, 38 | {"data", args{results, funcMap, "test-output"}, false}, 39 | {"bad funk", args{results, badFunk, "test-output"}, true}, 40 | // {"bad destination", args{results, funcMap, "/usr/bin/nowhere"}, true}, 41 | } 42 | 43 | for _, tt := range tests { 44 | tt := tt 45 | t.Run(tt.name, func(t *testing.T) { 46 | t.Parallel() 47 | 48 | if err := arm.ParseData(tt.args.result, tt.args.funcMap, tt.args.destination); (err != nil) != tt.wantErr { 49 | t.Errorf("ParseData() error = %v, wantErr %v", err, tt.wantErr) 50 | } 51 | }) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/arm/locals.go: -------------------------------------------------------------------------------- 1 | package arm 2 | 3 | import ( 4 | "strings" 5 | ) 6 | 7 | // ParseLocals parses fields into locals.tf. 8 | func ParseLocals(result map[string]interface{}) (string, map[string]interface{}, error) { 9 | var locals string 10 | 11 | myLocals, ok := result["locals"].(map[string]interface{}) 12 | 13 | if !ok || myLocals == nil { 14 | return "", result, &emptyResourceError{} 15 | } 16 | 17 | for item, value := range myLocals { 18 | var ( 19 | theValue string 20 | local string 21 | ) 22 | 23 | theValue, result = ParseString(value.(string), result) 24 | 25 | myLocals[item] = theValue 26 | 27 | if strings.Contains(theValue, "${") { 28 | local = "\t" + item + " = \"" + theValue + "\" #" + value.(string) + "\n" 29 | } else { 30 | local = "\t" + item + " = " + theValue + " #" + value.(string) + "\n" 31 | } 32 | 33 | locals += strings.ReplaceAll(local, "'", "\"") 34 | } 35 | 36 | result["locals"] = myLocals 37 | 38 | return locals, result, nil 39 | } 40 | -------------------------------------------------------------------------------- /src/arm/lookup_test.go: -------------------------------------------------------------------------------- 1 | package arm 2 | 3 | import ( 4 | "reflect" 5 | "testing" 6 | ) 7 | 8 | func Test_lookup(t *testing.T) { 9 | t.Parallel() 10 | 11 | type args struct { 12 | myType string 13 | } 14 | 15 | test := azurermTemplateDeployment 16 | 17 | var empty []byte 18 | 19 | tests := []struct { 20 | name string 21 | args args 22 | want []byte 23 | }{ 24 | {"Find", args{"Microsoft.Resources/deployments"}, test}, 25 | {"Dont Find", args{"garbage"}, empty}, 26 | {"Nil", args{""}, empty}, 27 | } 28 | 29 | for _, tt := range tests { 30 | tt := tt 31 | t.Run(tt.name, func(t *testing.T) { 32 | t.Parallel() 33 | 34 | if got := lookup(tt.args.myType); !reflect.DeepEqual(got, tt.want) { 35 | t.Errorf("lookup() = %v, want %v", got, tt.want) 36 | } 37 | }) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/arm/output.template: -------------------------------------------------------------------------------- 1 | 2 | output "{{.item}}" { 3 | {{- if eq .variable.Type "securestring"}} 4 | sensitive = true 5 | {{- end }} 6 | {{- if .variable.Value}} 7 | value = {{ .variable.Value }} 8 | {{- end }} 9 | description = "{{ .variable.Description }}" 10 | } 11 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_availability_set.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_availability_set" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | {{- if .resource.properties.platformUpdateDomainCount}} 14 | platform_update_domain_count= {{.resource.properties.platformUpdateDomainCount}} 15 | {{- end}} 16 | {{- if .resource.properties.platformFaultDomainCount}} 17 | platform_fault_domain_count = {{.resource.properties.platformFaultDomainCount}} 18 | {{- end}} 19 | {{- if .resource.tags}} 20 | tags = {{Tags .resource.tags}} 21 | {{- end}} 22 | {{- if .resource.dependsOn }} 23 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{$j}}, {{- end}}] 24 | {{- end}} 25 | } 26 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_bastion_host.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_bastion_host" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | 14 | {{- if .resource.properties.ipConfigurations}} 15 | {{ range $i, $j:= .resource.properties.ipConfigurations}} 16 | ip_configuration { 17 | name = {{$j.name|Quote}} 18 | subnet_id = {{$j.properties.subnet.id}} 19 | public_ip_address_id = {{$j.properties.publicIPAddress.id}} 20 | } 21 | {{- end}} 22 | {{- end}} 23 | {{- if .resource.tags}} 24 | tags = {{Tags .resource.tags}} 25 | {{- end}} 26 | {{- if .resource.dependsOn }} 27 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{$j}}, {{- end}}] 28 | {{- end}} 29 | } 30 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_container_app_environment.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_container_app_environment" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | log_analytics_workspace_id={{- Replace .resource.properties.appLogsConfiguration.logAnalyticsConfiguration.customerId ".customerId" ".id"}} 14 | {{- if .resource.tags}} 15 | tags = {{Tags .resource.tags}} 16 | {{- end}} 17 | {{- if .resource.dependsOn }} 18 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{Deref $j}}, {{- end}}] 19 | {{- end}} 20 | } 21 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_log_analytics_solution.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_log_analytics_solution" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | solution_name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | workspace_resource_id = {{Nil .resource.properties.workspaceresourceId|Quote}} 14 | workspace_name = "" 15 | {{- if .resource.plan}} 16 | plan { 17 | publisher = {{ .resource.plan.publisher|Quote}} 18 | product = {{ .resource.plan.product|Quote}} 19 | {{- if .resource.plan.promotionCode}} 20 | promotion_code = {{ .resource.plan.promotionCode|Quote}} 21 | {{- end}} 22 | } 23 | {{- end}} 24 | {{- if .resource.tags}} 25 | tags = {{Tags .resource.tags}} 26 | {{- end}} 27 | {{- if .resource.dependsOn }} 28 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{ $j}}, {{- end}}] 29 | {{- end}} 30 | } 31 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_monitor_activity_log_alert.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_monitor_activity_log_alert" "{{.item}}" { 2 | name = {{.resource.name|Quote }} 3 | {{- if .resource.resourceGroupName }} 4 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 5 | {{- else }} 6 | resource_group_name = data.azurerm_resource_group.sato.name 7 | {{- end}} 8 | scopes = {{index .resource.properties.scopes 0}} 9 | description = {{ .resource.properties.description|Quote}} 10 | enabled = {{ .resource.properties.enabled}} 11 | {{- if .resource.tags}} 12 | tags = {{Tags .resource.tags}} 13 | {{- end}} 14 | {{- if .resource.dependsOn }} 15 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{$j}}, {{- end}}] 16 | {{- end}} 17 | } 18 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_network_interface.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_network_interface" "{{ .item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | {{- range $x, $i:= .resource.properties.ipConfigurations}} 14 | ip_configuration { 15 | name = {{ $i.name |Quote}} 16 | {{- if $i.properties.subnet}} 17 | subnet_id = {{ $i.properties.subnet.id }} 18 | {{- end}} 19 | {{- if $i.properties.privateIPAllocationMethod }} 20 | private_ip_address_allocation = {{ $i.properties.privateIPAllocationMethod|Quote }} 21 | {{- end}} 22 | } 23 | {{- end}} 24 | {{- if .resource.tags}} 25 | tags = {{Tags .resource.tags}} 26 | {{- end}} 27 | {{- if .resource.dependsOn }} 28 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{ $j}}, {{- end}}] 29 | {{- end}} 30 | } 31 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_network_interface_application_gateway_backend_address_pool_association.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_network_interface_application_gateway_backend_address_pool_association" "{{.item}}" { 2 | network_interface_id = azurerm_network_interface.example.id 3 | ip_configuration_name = "testconfiguration1" 4 | backend_address_pool_id = tolist(azurerm_application_gateway.network.backend_address_pool).0.id 5 | {{- if .resource.tags}} 6 | tags = {{Tags .resource.tags}} 7 | {{- end}} 8 | {{- if .resource.dependsOn }} 9 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{$j}}, {{- end}}] 10 | {{- end}} 11 | } 12 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_private_dns_zone.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_private_dns_zone" "{{.item}}" { 2 | name = {{.resource.name|Quote }} 3 | {{- if .resource.resourceGroupName }} 4 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 5 | {{- else }} 6 | resource_group_name = data.azurerm_resource_group.sato.name 7 | {{- end}} 8 | 9 | 10 | {{- if .resource.tags}} 11 | tags = {{Tags .resource.tags}} 12 | {{- end}} 13 | {{- if .resource.dependsOn }} 14 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{$j}}, {{- end}}] 15 | {{- end}} 16 | } 17 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_private_dns_zone_virtual_network_link.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_private_dns_zone_virtual_network_link" "{{.item}}" { 2 | name = {{ .resource.name|Quote }} 3 | {{- if .resource.resourceGroupName }} 4 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 5 | {{- else }} 6 | resource_group_name = data.azurerm_resource_group.sato.name 7 | {{- end}} 8 | private_dns_zone_name = {{.resource.name|Quote}} 9 | virtual_network_id = {{.resource.properties.virtualNetwork.id|Quote}} 10 | {{- if NotNil .resource.properties.registrationEnabled}} 11 | registration_enabled = {{.resource.properties.registrationEnabled|Quote}} 12 | {{- end}} 13 | {{- if .resource.tags}} 14 | tags = {{Tags .resource.tags}} 15 | {{- end}} 16 | {{- if .resource.dependsOn }} 17 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{$j}}, {{- end}}] 18 | {{- end}} 19 | } 20 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_private_endpoint.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_private_endpoint" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | subnet_id = {{ .resource.properties.subnet.id|Quote}} 14 | {{- if .resource.properties.privateLinkServiceConnections}} 15 | {{- range $x, $y:= .resource.properties.privateLinkServiceConnections}} 16 | private_service_connection { 17 | {{- if $y.name}} 18 | name = {{$y.name|Quote}} 19 | {{- end}} 20 | {{- if $y.properties.privateLinkServiceId}} 21 | private_connection_resource_id = {{$y.properties.privateLinkServiceId}} 22 | {{- end}} 23 | is_manual_connection = false 24 | } 25 | {{- end}} 26 | {{- end}} 27 | {{- if .resource.tags}} 28 | tags = {{Tags .resource.tags}} 29 | {{- end}} 30 | {{- if .resource.dependsOn }} 31 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{ $j}}, {{- end}}] 32 | {{- end}} 33 | } 34 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_public_ip.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_public_ip" "{{ .item }}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- range $a, $j:= .resource.sku}} 9 | sku = {{ $j|Quote }} 10 | {{- end }} 11 | {{- if .resource.resourceGroupName }} 12 | resource_group_name = "{{ .resource.resourceGroupName|Quote }}" 13 | {{- else }} 14 | resource_group_name = data.azurerm_resource_group.sato.name 15 | {{- end}} 16 | {{- if .resource.tags}} 17 | tags = {{Tags .resource.tags}} 18 | {{- end}} 19 | {{- if .resource.properties.dnsSettings.domainNameLabel}} 20 | domain_name_label = {{ .resource.properties.dnsSettings.domainNameLabel|Quote }} 21 | {{- end}} 22 | {{- if .resource.properties.publicIPAllocationMethod}} 23 | allocation_method = {{.resource.properties.publicIPAllocationMethod|Quote}} 24 | {{- end}} 25 | {{- if .resource.dependsOn }} 26 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{Deref $j}}, {{- end}}] 27 | {{- end}} 28 | } 29 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_role_assignment.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_role_assignment" "{{.item}}" { 2 | name = {{.resource.name}} 3 | principal_id = {{.resource.properties.principalId}} 4 | {{- if .resource.properties.scope}} 5 | scope = {{.resource.properties.scope}} 6 | {{- else}} 7 | scope = "" 8 | {{- end}} 9 | role_definition_id = {{.resource.properties.roleDefinitionId}} 10 | {{- if .resource.metadata.description}} 11 | description = {{.resource.metadata.description|Quote}} 12 | {{- else}} 13 | {{- if .resource.properties.description }} 14 | description = {{.resource.properties.description|Quote}} 15 | {{- end}} 16 | {{- end}} 17 | {{- if .resource.tags}} 18 | tags = {{Tags .resource.tags}} 19 | {{- end}} 20 | {{- if .resource.dependsOn }} 21 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{ $j}}, {{- end}}] 22 | {{- end}} 23 | } 24 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_role_definition.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_role_definition" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | scope 14 | description 15 | permissions 16 | assignable_scopes 17 | {{- if .resource.tags}} 18 | tags = {{Tags .resource.tags}} 19 | {{- end}} 20 | {{- if .resource.dependsOn }} 21 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{Deref $j}}, {{- end}}] 22 | {{- end}} 23 | } 24 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_servicebus_namespace_authorization_rule.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_servicebus_namespace_authorization_rule" "{{.item}}" { 2 | name = {{ .resource.name|Quote }} 3 | {{- if .resource.properties.rights}} 4 | {{- range $a, $i:= .resource.properties.rights}} 5 | {{ToLower $i}} = true 6 | {{- end}} 7 | {{- end}} 8 | namespace_id = "" 9 | {{- if .resource.dependsOn }} 10 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{ $j}}, {{- end}}] 11 | {{- end}} 12 | {{- if .resource.tags}} 13 | tags = {{Tags .resource.tags}} 14 | {{- end}} 15 | } 16 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_storage_account.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_storage_account" "{{.item}}" { 2 | {{- range $a, $i:= .resource.sku}} 3 | account_replication_type = {{ SplitOn $i "_" 1|Quote }} 4 | account_tier = {{ SplitOn $i "_" 0|Quote }} 5 | {{- end}} 6 | location = {{ .resource.location|Quote }} 7 | name = {{ .resource.name|Quote }} 8 | account_kind = {{ .resource.kind|Quote}} 9 | {{- if .resource.resourceGroupName }} 10 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 11 | {{- else }} 12 | resource_group_name = data.azurerm_resource_group.sato.name 13 | {{- end}} 14 | {{- if .resource.tags}} 15 | tags = {{Tags .resource.tags}} 16 | {{- end}} 17 | {{- if .resource.dependsOn }} 18 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{Deref $j}}, {{- end}}] 19 | {{- end}} 20 | } 21 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_subnet.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_subnet" "{{.item}}" { 2 | {{- if .resource.tags}} 3 | tags = {{Tags .resource.tags}} 4 | {{- end}} 5 | {{- if .resource.dependsOn }} 6 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{Deref $j}}, {{- end}}] 7 | {{- end}} 8 | } 9 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_template_deployment.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_template_deployment" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | template_body = {{Marshal .resource.properties.template}} 14 | deployment_mode= {{ .resource.properties.mode|Quote}} 15 | parameters { 16 | {{- range $i,$j:=.resource.properties.parameters}} 17 | {{ $i }} = {{$j.value}} 18 | {{- end}} 19 | } 20 | {{- if .resource.tags}} 21 | tags = {{Tags .resource.tags}} 22 | {{- end}} 23 | {{- if .resource.dependsOn }} 24 | depends_on = {{ .resource.dependsOn }} 25 | {{- end}} 26 | } 27 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_user_assigned_identity.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_user_assigned_identity" "{{.item}}" { 2 | {{- if .resource.location}} 3 | location = {{ .resource.location|Quote }} 4 | {{- else}} 5 | location = data.azurerm_resource_group.sato.location 6 | {{- end }} 7 | name = {{ .resource.name|Quote }} 8 | {{- if .resource.resourceGroupName }} 9 | resource_group_name = {{ .resource.resourceGroupName|Quote }} 10 | {{- else }} 11 | resource_group_name = data.azurerm_resource_group.sato.name 12 | {{- end}} 13 | {{- if .resource.tags}} 14 | tags = {{Tags .resource.tags}} 15 | {{- end}} 16 | {{- if .resource.dependsOn }} 17 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{Deref $j}}, {{- end}}] 18 | {{- end}} 19 | } 20 | -------------------------------------------------------------------------------- /src/arm/resources/azurerm_virtual_machine_extension.template: -------------------------------------------------------------------------------- 1 | resource "azurerm_virtual_machine_extension" "{{.item}}" { 2 | name = {{ .resource.name |Quote}} 3 | {{- $p:= .resource.properties}} 4 | publisher = {{$p.publisher|Quote}} 5 | type = {{$p.type|Quote}} 6 | type_handler_version = {{$p.typeHandlerVersion|Quote}} 7 | {{- if NotNil $p.autoUpgradeMinorVersion}} 8 | auto_upgrade_minor_version = {{$p.autoUpgradeMinorVersion}} 9 | {{- end}} 10 | {{- if NotNil $p.enableAutomaticUpgrade}} 11 | automatic_upgrade_enabled = {{$p.enableAutomaticUpgrade}} 12 | {{- end}} 13 | {{- if $p.settings}} 14 | settings = jsonencode({{Marshal $p.settings}}) 15 | {{- end}} 16 | {{- if $p.protectedSettings}} 17 | protected_settings = jsonencode({{Marshal $p.protectedSettings}}) 18 | {{- end}} 19 | {{- if .resource.tags}} 20 | tags = {{Tags .resource.tags}} 21 | {{- end}} 22 | {{- if .resource.dependsOn }} 23 | virtual_machine_id = {{index .resource.dependsOn 0|Quote}}.id 24 | depends_on = [{{- range $x, $j:= .resource.dependsOn }} {{ $j}}, {{- end}}] 25 | {{- end}} 26 | } 27 | -------------------------------------------------------------------------------- /src/arm/resources_test.go: -------------------------------------------------------------------------------- 1 | package arm_test 2 | 3 | import ( 4 | "reflect" 5 | "sato/src/arm" 6 | "testing" 7 | "text/template" 8 | ) 9 | 10 | func Test_parseResources(t *testing.T) { 11 | t.Parallel() 12 | 13 | type args struct { 14 | result map[string]interface{} 15 | funcMap template.FuncMap 16 | destination string 17 | } 18 | 19 | tests := []struct { 20 | name string 21 | args args 22 | want map[string]interface{} 23 | wantErr bool 24 | }{ 25 | {"Fail", args{}, nil, true}, 26 | {"Empty Cast", args{nil, nil, ""}, nil, true}, 27 | //{"minimal", args{result, nil, ""}, nil, false}, 28 | } 29 | 30 | for _, tt := range tests { 31 | tt := tt 32 | t.Run(tt.name, func(t *testing.T) { 33 | t.Parallel() 34 | got, err := arm.ParseResources(tt.args.result, tt.args.funcMap, tt.args.destination) 35 | if (err != nil) != tt.wantErr { 36 | t.Errorf("ParseResources() error = %v, wantErr %v", err, tt.wantErr) 37 | 38 | return 39 | } 40 | if !reflect.DeepEqual(got, tt.want) { 41 | t.Errorf("ParseResources() got = %v, want %v", got, tt.want) 42 | } 43 | }) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/arm/variable.go: -------------------------------------------------------------------------------- 1 | package arm 2 | 3 | import ( 4 | _ "embed" // required for embed 5 | ) 6 | 7 | //go:embed variable.template 8 | var variableFile []byte 9 | 10 | //go:embed output.template 11 | var outputFile []byte 12 | 13 | //go:embed data.template 14 | var dataFile []byte 15 | -------------------------------------------------------------------------------- /src/arm/variable.template: -------------------------------------------------------------------------------- 1 | 2 | variable "{{.item}}" { 3 | {{- if eq .variable.type "securestring"}} 4 | type = string 5 | sensitive = true 6 | {{- else }} 7 | type = {{.variable.type}} 8 | {{- end }} 9 | {{- if .variable.default}} 10 | {{- if or (eq .variable.type "string") (eq .variable.type "securestring")}} 11 | default = {{ Replace .variable.default "${" "$${" | Quote }} 12 | {{- else}} 13 | default = {{ Replace .variable.default "${" "$${" }} 14 | {{- end }} 15 | {{- end }} 16 | {{- if .variable.metadata.description }} 17 | description = "{{ .variable.metadata.description }}" 18 | {{- end }} 19 | } 20 | -------------------------------------------------------------------------------- /src/cf/data.go: -------------------------------------------------------------------------------- 1 | package cf 2 | 3 | const dataAvailabilityZone = `data "aws_availability_zone" "example" { 4 | name = "" 5 | } 6 | ` 7 | 8 | const dataSubnet = `data "aws_subnet" "selected" { 9 | id = "" 10 | } 11 | ` 12 | 13 | const dataKeyPair = `data "aws_key_pair" "example" { 14 | key_name = "" 15 | include_public_key = true 16 | } 17 | ` 18 | 19 | const dataVpc = `data "aws_vpc" "selected" { 20 | id = "" 21 | } 22 | ` 23 | 24 | const dataRegion = "data \"aws_region\" \"current\" {}\n" 25 | 26 | const dataSecurityGroup = "data \"aws_security_group\" \"selected\" {\n id = \"\"\n}\n" 27 | 28 | const provider = "provider \"aws\" {\n region=\"eu-west-2\"\n}\n" 29 | -------------------------------------------------------------------------------- /src/cf/resources/aws_appautoscaling_target.template: -------------------------------------------------------------------------------- 1 | resource "aws_appautoscaling_target" "{{.item}}" { 2 | max_capacity = {{.resource.MaxCapacity}} 3 | min_capacity = {{.resource.MinCapacity}} 4 | resource_id = {{Nil .resource.ResourceId|Quote}} 5 | role_arn = {{Nil .resource.RoleARN|Quote}} 6 | scalable_dimension = {{Nil .resource.ScalableDimension|Quote}} 7 | service_namespace = {{Nil .resource.ServiceNamespace|Quote}} 8 | } 9 | -------------------------------------------------------------------------------- /src/cf/resources/aws_athena_named_query.template: -------------------------------------------------------------------------------- 1 | resource "aws_athena_named_query" "{{.item}}" { 2 | name = {{.resource.Name|Quote}} 3 | {{- if .resource.Description}} 4 | description = {{Nil .resource.Description|Quote}} 5 | {{- end}} 6 | {{- if .resource.WorkGroup}} 7 | workgroup = {{Nil .resource.WorkGroup|Quote}} 8 | {{- end }} 9 | database = {{Nil .resource.Database|Quote}} 10 | query = <