aws-service-operator
aws-service-operator copied to clipboard
Code Generate All CFN Resources
Idea
Using the AWS CloudFormation Resource Specification code generate all resources instead of having to manually design each resource.
Spec: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html
Example S3 Bucket Spec
{
"PropertyTypes": {
"AWS::S3::Bucket.AbortIncompleteMultipartUpload": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-abortincompletemultipartupload.html",
"Properties": {
"DaysAfterInitiation": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-abortincompletemultipartupload.html#cfn-s3-bucket-abortincompletemultipartupload-daysafterinitiation",
"PrimitiveType": "Integer",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.AccelerateConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-accelerateconfiguration.html",
"Properties": {
"AccelerationStatus": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-accelerateconfiguration.html#cfn-s3-bucket-accelerateconfiguration-accelerationstatus",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.AccessControlTranslation": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-accesscontroltranslation.html",
"Properties": {
"Owner": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-accesscontroltranslation.html#cfn-s3-bucket-accesscontroltranslation-owner",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.AnalyticsConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-analyticsconfiguration.html",
"Properties": {
"Id": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-analyticsconfiguration.html#cfn-s3-bucket-analyticsconfiguration-id",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Prefix": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-analyticsconfiguration.html#cfn-s3-bucket-analyticsconfiguration-prefix",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"StorageClassAnalysis": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-analyticsconfiguration.html#cfn-s3-bucket-analyticsconfiguration-storageclassanalysis",
"Required": true,
"Type": "StorageClassAnalysis",
"UpdateType": "Mutable"
},
"TagFilters": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-analyticsconfiguration.html#cfn-s3-bucket-analyticsconfiguration-tagfilters",
"DuplicatesAllowed": false,
"ItemType": "TagFilter",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.BucketEncryption": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-bucketencryption.html",
"Properties": {
"ServerSideEncryptionConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-bucketencryption.html#cfn-s3-bucket-bucketencryption-serversideencryptionconfiguration",
"DuplicatesAllowed": false,
"ItemType": "ServerSideEncryptionRule",
"Required": true,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.CorsConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors.html",
"Properties": {
"CorsRules": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors.html#cfn-s3-bucket-cors-corsrule",
"DuplicatesAllowed": false,
"ItemType": "CorsRule",
"Required": true,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.CorsRule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html",
"Properties": {
"AllowedHeaders": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-allowedheaders",
"DuplicatesAllowed": false,
"PrimitiveItemType": "String",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"AllowedMethods": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-allowedmethods",
"DuplicatesAllowed": false,
"PrimitiveItemType": "String",
"Required": true,
"Type": "List",
"UpdateType": "Mutable"
},
"AllowedOrigins": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-allowedorigins",
"DuplicatesAllowed": false,
"PrimitiveItemType": "String",
"Required": true,
"Type": "List",
"UpdateType": "Mutable"
},
"ExposedHeaders": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-exposedheaders",
"DuplicatesAllowed": false,
"PrimitiveItemType": "String",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"Id": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-id",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"MaxAge": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html#cfn-s3-bucket-cors-corsrule-maxage",
"PrimitiveType": "Integer",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.DataExport": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-dataexport.html",
"Properties": {
"Destination": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-dataexport.html#cfn-s3-bucket-dataexport-destination",
"Required": true,
"Type": "Destination",
"UpdateType": "Mutable"
},
"OutputSchemaVersion": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-dataexport.html#cfn-s3-bucket-dataexport-outputschemaversion",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.Destination": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-destination.html",
"Properties": {
"BucketAccountId": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-destination.html#cfn-s3-bucket-destination-bucketaccountid",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"BucketArn": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-destination.html#cfn-s3-bucket-destination-bucketarn",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Format": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-destination.html#cfn-s3-bucket-destination-format",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Prefix": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-destination.html#cfn-s3-bucket-destination-prefix",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.EncryptionConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-encryptionconfiguration.html",
"Properties": {
"ReplicaKmsKeyID": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-encryptionconfiguration.html#cfn-s3-bucket-encryptionconfiguration-replicakmskeyid",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.FilterRule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html",
"Properties": {
"Name": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key-rules-name",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Value": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key-rules-value",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.InventoryConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html",
"Properties": {
"Destination": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html#cfn-s3-bucket-inventoryconfiguration-destination",
"Required": true,
"Type": "Destination",
"UpdateType": "Mutable"
},
"Enabled": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html#cfn-s3-bucket-inventoryconfiguration-enabled",
"PrimitiveType": "Boolean",
"Required": true,
"UpdateType": "Mutable"
},
"Id": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html#cfn-s3-bucket-inventoryconfiguration-id",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"IncludedObjectVersions": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html#cfn-s3-bucket-inventoryconfiguration-includedobjectversions",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"OptionalFields": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html#cfn-s3-bucket-inventoryconfiguration-optionalfields",
"DuplicatesAllowed": false,
"PrimitiveItemType": "String",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"Prefix": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html#cfn-s3-bucket-inventoryconfiguration-prefix",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"ScheduleFrequency": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html#cfn-s3-bucket-inventoryconfiguration-schedulefrequency",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.LambdaConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html",
"Properties": {
"Event": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-event",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Filter": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-filter",
"Required": false,
"Type": "NotificationFilter",
"UpdateType": "Mutable"
},
"Function": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig-function",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.LifecycleConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig.html",
"Properties": {
"Rules": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig.html#cfn-s3-bucket-lifecycleconfig-rules",
"DuplicatesAllowed": false,
"ItemType": "Rule",
"Required": true,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.LoggingConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html",
"Properties": {
"DestinationBucketName": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html#cfn-s3-bucket-loggingconfig-destinationbucketname",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"LogFilePrefix": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html#cfn-s3-bucket-loggingconfig-logfileprefix",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.MetricsConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-metricsconfiguration.html",
"Properties": {
"Id": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-metricsconfiguration.html#cfn-s3-bucket-metricsconfiguration-id",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Prefix": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-metricsconfiguration.html#cfn-s3-bucket-metricsconfiguration-prefix",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"TagFilters": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-metricsconfiguration.html#cfn-s3-bucket-metricsconfiguration-tagfilters",
"DuplicatesAllowed": false,
"ItemType": "TagFilter",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.NoncurrentVersionTransition": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html",
"Properties": {
"StorageClass": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition-storageclass",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"TransitionInDays": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition-transitionindays",
"PrimitiveType": "Integer",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.NotificationConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html",
"Properties": {
"LambdaConfigurations": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-lambdaconfig",
"DuplicatesAllowed": false,
"ItemType": "LambdaConfiguration",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"QueueConfigurations": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-queueconfig",
"DuplicatesAllowed": false,
"ItemType": "QueueConfiguration",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"TopicConfigurations": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html#cfn-s3-bucket-notificationconfig-topicconfig",
"DuplicatesAllowed": false,
"ItemType": "TopicConfiguration",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.NotificationFilter": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html",
"Properties": {
"S3Key": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key",
"Required": true,
"Type": "S3KeyFilter",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.PublicAccessBlockConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html",
"Properties": {
"BlockPublicAcls": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-blockpublicacls",
"PrimitiveType": "Boolean",
"Required": false,
"UpdateType": "Mutable"
},
"BlockPublicPolicy": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-blockpublicpolicy",
"PrimitiveType": "Boolean",
"Required": false,
"UpdateType": "Mutable"
},
"IgnorePublicAcls": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-ignorepublicacls",
"PrimitiveType": "Boolean",
"Required": false,
"UpdateType": "Mutable"
},
"RestrictPublicBuckets": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html#cfn-s3-bucket-publicaccessblockconfiguration-restrictpublicbuckets",
"PrimitiveType": "Boolean",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.QueueConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html",
"Properties": {
"Event": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html#cfn-s3-bucket-notificationconfig-queueconfig-event",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Filter": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html#cfn-s3-bucket-notificationconfig-queueconfig-filter",
"Required": false,
"Type": "NotificationFilter",
"UpdateType": "Mutable"
},
"Queue": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html#cfn-s3-bucket-notificationconfig-queueconfig-queue",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.RedirectAllRequestsTo": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html",
"Properties": {
"HostName": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html#cfn-s3-websiteconfiguration-redirectallrequeststo-hostname",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Protocol": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html#cfn-s3-websiteconfiguration-redirectallrequeststo-protocol",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.RedirectRule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html",
"Properties": {
"HostName": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-hostname",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"HttpRedirectCode": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-httpredirectcode",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"Protocol": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-protocol",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"ReplaceKeyPrefixWith": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-replacekeyprefixwith",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"ReplaceKeyWith": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html#cfn-s3-websiteconfiguration-redirectrule-replacekeywith",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.ReplicationConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html",
"Properties": {
"Role": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html#cfn-s3-bucket-replicationconfiguration-role",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Rules": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html#cfn-s3-bucket-replicationconfiguration-rules",
"DuplicatesAllowed": false,
"ItemType": "ReplicationRule",
"Required": true,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.ReplicationDestination": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html",
"Properties": {
"AccessControlTranslation": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html#cfn-s3-bucket-replicationdestination-accesscontroltranslation",
"Required": false,
"Type": "AccessControlTranslation",
"UpdateType": "Mutable"
},
"Account": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html#cfn-s3-bucket-replicationdestination-account",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"Bucket": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html#cfn-s3-bucket-replicationconfiguration-rules-destination-bucket",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"EncryptionConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html#cfn-s3-bucket-replicationdestination-encryptionconfiguration",
"Required": false,
"Type": "EncryptionConfiguration",
"UpdateType": "Mutable"
},
"StorageClass": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html#cfn-s3-bucket-replicationconfiguration-rules-destination-storageclass",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.ReplicationRule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html",
"Properties": {
"Destination": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-destination",
"Required": true,
"Type": "ReplicationDestination",
"UpdateType": "Mutable"
},
"Id": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-id",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"Prefix": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-prefix",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"SourceSelectionCriteria": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationrule-sourceselectioncriteria",
"Required": false,
"Type": "SourceSelectionCriteria",
"UpdateType": "Mutable"
},
"Status": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html#cfn-s3-bucket-replicationconfiguration-rules-status",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.RoutingRule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html",
"Properties": {
"RedirectRule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html#cfn-s3-websiteconfiguration-routingrules-redirectrule",
"Required": true,
"Type": "RedirectRule",
"UpdateType": "Mutable"
},
"RoutingRuleCondition": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html#cfn-s3-websiteconfiguration-routingrules-routingrulecondition",
"Required": false,
"Type": "RoutingRuleCondition",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.RoutingRuleCondition": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html",
"Properties": {
"HttpErrorCodeReturnedEquals": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html#cfn-s3-websiteconfiguration-routingrules-routingrulecondition-httperrorcodereturnedequals",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"KeyPrefixEquals": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html#cfn-s3-websiteconfiguration-routingrules-routingrulecondition-keyprefixequals",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.Rule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html",
"Properties": {
"AbortIncompleteMultipartUpload": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-rule-abortincompletemultipartupload",
"Required": false,
"Type": "AbortIncompleteMultipartUpload",
"UpdateType": "Mutable"
},
"ExpirationDate": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-expirationdate",
"PrimitiveType": "Timestamp",
"Required": false,
"UpdateType": "Mutable"
},
"ExpirationInDays": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-expirationindays",
"PrimitiveType": "Integer",
"Required": false,
"UpdateType": "Mutable"
},
"Id": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-id",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"NoncurrentVersionExpirationInDays": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversionexpirationindays",
"PrimitiveType": "Integer",
"Required": false,
"UpdateType": "Mutable"
},
"NoncurrentVersionTransition": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition",
"Required": false,
"Type": "NoncurrentVersionTransition",
"UpdateType": "Mutable"
},
"NoncurrentVersionTransitions": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransitions",
"DuplicatesAllowed": false,
"ItemType": "NoncurrentVersionTransition",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"Prefix": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-prefix",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"Status": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-status",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"TagFilters": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-rule-tagfilters",
"DuplicatesAllowed": false,
"ItemType": "TagFilter",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"Transition": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-transition",
"Required": false,
"Type": "Transition",
"UpdateType": "Mutable"
},
"Transitions": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-transitions",
"DuplicatesAllowed": false,
"ItemType": "Transition",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.S3KeyFilter": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key.html",
"Properties": {
"Rules": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key.html#cfn-s3-bucket-notificationconfiguraiton-config-filter-s3key-rules",
"DuplicatesAllowed": false,
"ItemType": "FilterRule",
"Required": true,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.ServerSideEncryptionByDefault": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionbydefault.html",
"Properties": {
"KMSMasterKeyID": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionbydefault.html#cfn-s3-bucket-serversideencryptionbydefault-kmsmasterkeyid",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"SSEAlgorithm": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionbydefault.html#cfn-s3-bucket-serversideencryptionbydefault-ssealgorithm",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.ServerSideEncryptionRule": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html",
"Properties": {
"ServerSideEncryptionByDefault": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#cfn-s3-bucket-serversideencryptionrule-serversideencryptionbydefault",
"Required": false,
"Type": "ServerSideEncryptionByDefault",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.SourceSelectionCriteria": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-sourceselectioncriteria.html",
"Properties": {
"SseKmsEncryptedObjects": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-sourceselectioncriteria.html#cfn-s3-bucket-sourceselectioncriteria-ssekmsencryptedobjects",
"Required": true,
"Type": "SseKmsEncryptedObjects",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.SseKmsEncryptedObjects": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ssekmsencryptedobjects.html",
"Properties": {
"Status": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ssekmsencryptedobjects.html#cfn-s3-bucket-ssekmsencryptedobjects-status",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.StorageClassAnalysis": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-storageclassanalysis.html",
"Properties": {
"DataExport": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-storageclassanalysis.html#cfn-s3-bucket-storageclassanalysis-dataexport",
"Required": false,
"Type": "DataExport",
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.TagFilter": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-tagfilter.html",
"Properties": {
"Key": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-tagfilter.html#cfn-s3-bucket-tagfilter-key",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Value": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-tagfilter.html#cfn-s3-bucket-tagfilter-value",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.TopicConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html",
"Properties": {
"Event": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html#cfn-s3-bucket-notificationconfig-topicconfig-event",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Filter": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html#cfn-s3-bucket-notificationconfig-topicconfig-filter",
"Required": false,
"Type": "NotificationFilter",
"UpdateType": "Mutable"
},
"Topic": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html#cfn-s3-bucket-notificationconfig-topicconfig-topic",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.Transition": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html",
"Properties": {
"StorageClass": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html#cfn-s3-bucket-lifecycleconfig-rule-transition-storageclass",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"TransitionDate": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html#cfn-s3-bucket-lifecycleconfig-rule-transition-transitiondate",
"PrimitiveType": "Timestamp",
"Required": false,
"UpdateType": "Mutable"
},
"TransitionInDays": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html#cfn-s3-bucket-lifecycleconfig-rule-transition-transitionindays",
"PrimitiveType": "Integer",
"Required": false,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.VersioningConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-versioningconfig.html",
"Properties": {
"Status": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-versioningconfig.html#cfn-s3-bucket-versioningconfig-status",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
},
"AWS::S3::Bucket.WebsiteConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html",
"Properties": {
"ErrorDocument": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-errordocument",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"IndexDocument": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-indexdocument",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"RedirectAllRequestsTo": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-redirectallrequeststo",
"Required": false,
"Type": "RedirectAllRequestsTo",
"UpdateType": "Mutable"
},
"RoutingRules": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html#cfn-s3-websiteconfiguration-routingrules",
"DuplicatesAllowed": false,
"ItemType": "RoutingRule",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
}
}
},
"Tag": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html",
"Properties": {
"Key": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-key",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
},
"Value": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-value",
"PrimitiveType": "String",
"Required": true,
"UpdateType": "Mutable"
}
}
}
},
"ResourceType": {
"AWS::S3::Bucket": {
"Attributes": {
"Arn": {
"PrimitiveType": "String"
},
"DomainName": {
"PrimitiveType": "String"
},
"DualStackDomainName": {
"PrimitiveType": "String"
},
"RegionalDomainName": {
"PrimitiveType": "String"
},
"WebsiteURL": {
"PrimitiveType": "String"
}
},
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html",
"Properties": {
"AccelerateConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-accelerateconfiguration",
"Required": false,
"Type": "AccelerateConfiguration",
"UpdateType": "Mutable"
},
"AccessControl": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-accesscontrol",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Mutable"
},
"AnalyticsConfigurations": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-analyticsconfigurations",
"DuplicatesAllowed": false,
"ItemType": "AnalyticsConfiguration",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"BucketEncryption": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-bucketencryption",
"Required": false,
"Type": "BucketEncryption",
"UpdateType": "Mutable"
},
"BucketName": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-name",
"PrimitiveType": "String",
"Required": false,
"UpdateType": "Immutable"
},
"CorsConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-crossoriginconfig",
"Required": false,
"Type": "CorsConfiguration",
"UpdateType": "Mutable"
},
"InventoryConfigurations": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-inventoryconfigurations",
"DuplicatesAllowed": false,
"ItemType": "InventoryConfiguration",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"LifecycleConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-lifecycleconfig",
"Required": false,
"Type": "LifecycleConfiguration",
"UpdateType": "Mutable"
},
"LoggingConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-loggingconfig",
"Required": false,
"Type": "LoggingConfiguration",
"UpdateType": "Mutable"
},
"MetricsConfigurations": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-metricsconfigurations",
"DuplicatesAllowed": false,
"ItemType": "MetricsConfiguration",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"NotificationConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-notification",
"Required": false,
"Type": "NotificationConfiguration",
"UpdateType": "Mutable"
},
"PublicAccessBlockConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-publicaccessblockconfiguration",
"Required": false,
"Type": "PublicAccessBlockConfiguration",
"UpdateType": "Mutable"
},
"ReplicationConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-replicationconfiguration",
"Required": false,
"Type": "ReplicationConfiguration",
"UpdateType": "Mutable"
},
"Tags": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-tags",
"DuplicatesAllowed": true,
"ItemType": "Tag",
"Required": false,
"Type": "List",
"UpdateType": "Mutable"
},
"VersioningConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-versioning",
"Required": false,
"Type": "VersioningConfiguration",
"UpdateType": "Mutable"
},
"WebsiteConfiguration": {
"Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-websiteconfiguration",
"Required": false,
"Type": "WebsiteConfiguration",
"UpdateType": "Mutable"
}
}
}
},
"ResourceSpecificationVersion": "2.18.0"
}
Example Kubernetes S3 Custom Resource
apiVersion: "awsoperator.io/v1alpha"
kind: "S3Bucket"
metadata:
name: "example-s3bucket"
namespace: "default"
spec:
accelerate:
accelerationStatus: "Enabled"
accessControl: "PublicRead"
analytics:
- id: "test-analytics-id"
prefix: "users"
storageClassAnalysis:
dataExport:
outputSchemaVersion: "V_1"
destination:
accountId:
bucket:
arn: "[some arn]"
bucketRef:
name: "example-s3bucket"
namespace: "default"
format: "csv"
prefix: "test"
tagFilters:
- key: "login"
value: "chris"
encryption:
serverSideEncryption:
- byDefault:
sseAlgorithm: "aws:kms"
kmsMasterKeyID: "[some key id]"
cors:
rules:
- allowedHeaders:
- "Authorization"
- allowedMethods:
- "GET"
- allowedOrigins:
- "localhost"
- exposedHeaders:
- "XMLHttpRequest"
- id: "allow-authorization-request"
- maxAge: 60
inventory:
- destination:
accountId:
bucket:
arn: "[some arn]"
bucketRef:
name: "example-s3bucket"
namespace: "default"
format: "csv"
prefix: "test"
enabled: true
id: "test-inventory-configuration"
includedObjectVersions: "All"
optionalFields:
- "Size"
prefix: "test"
scheduleFrequency: "Daily"
lifecycle:
- rules:
- abortIncompleteMultipartUpload:
daysAfterInitiation: 5
expirationDate: "2008-09-15T15:53:00"
expirationInDays: 5
id: "expire-all-keys"
noncurrentVersionExpirationInDays: 5
noncurrentVersionTransition:
storageClass: "GLACIER"
transitionInDays: 5
noncurrentVersionTransitions:
- storageClass: "GLACIER"
transitionInDays: 5
prefix: "test"
status: "Enabled"
tagFilters:
- key: "login"
value: "chris"
transition:
storageClass: "GLACIER"
transitionDate: "2008-09-15T15:53:00"
transitionInDays: 5
transitions:
- storageClass: "GLACIER"
transitionDate: "2008-09-15T15:53:00"
transitionInDays: 5
logging:
destinationBucketName: "example-s3bucket"
logFilePrefix: "example"
metrics:
- id: "user-metrics"
prefix: "users"
tagFilters:
- key: "login"
value: "chris"
notification:
lambda:
- event: "s3:ObjectCreated:*"
filter:
s3key:
rules:
- key: "suffix"
value: "zip"
function:
arn: "[some lambda function arn]"
functionRef:
name: "example-function"
namespace: "default"
queue:
- event: "s3:ObjectCreated:*"
filter:
s3key:
rules:
- key: "suffix"
value: "zip"
queue:
arn: "[some queue arn]"
queueRef:
name: "example-queue"
namespace: "default"
topic:
- event: "s3:ObjectCreated:*"
filter:
s3key:
rules:
- key: "suffix"
value: "zip"
topic:
arn: "[some topic arn]"
topicRef:
name: "example-topic"
namespace: "default"
publicAccessBlock:
blockPublicAcls: true
blockPublicPolicy: true
ignorePublicAcls: true
restrictPublicBuckets: true
replication:
role: "[iam role arn]"
rules:
- destination:
accessControlTranslation:
owner: "Destination"
account: "[some account id]"
bucket: "us-west-2-example-bucket"
encryption:
replicaKmsKeyID:
storageClass: "STANDARD"
id: "replicate-us-west-2"
prefix: "users"
sourceSelectionCriteria:
sseKmsEncryptedObjects:
status: "Enabled"
status: "Enabled"
tags: # note the operator will automatically tag resources `aws:operator:name`, `aws:operator:namespace`, `aws:operator:resource-version`, `aws:operator:cluster-name`
- name: "team" # should these be prefixed with `aws:operator:[name]` or should only the operator specific ones use this... probably only the operator specific
value: "operations"
versioning:
status: "Enabled"
website:
errorDocument: "error.html"
indexDocument: "index.html"
redirectAllRequestsTo:
hostName: "awsoperator.io"
protocol: "https"
routingRules:
- redirectRule:
hostName: "awsoperator.io"
httpRedirectCode: 301
protocol: "https"
replaceKeyPrefixWith: "/docs"
replaceKeyWith: "/docs"
routingRuleCondition:
httpErrorCodeReturnedEquals: 403
keyPrefixEquals: "/docs"
Changes
You'll notice a few specific ways these are still customized to make composing the resources easier for example we remove the parent key name from nested resources like CorsRules
changes to rules
under the cors
key. Also removing configuration(s)
since everything in this is a configuration and that is duplicative. Other component is using similar to Kubernetes core resources like Secrets and ConfigMaps allowing you to reference by ARN or by Kubernetes namespace/name mappings. So if a key is postfixed with Arn
convert into something like:
bucket:
arn: "[some arn]"
bucketRef:
name: "example-s3bucket"
namespace: "default"
This looks awesome. I was just trying to figure out how to spin up my own definitions... it'd be great to not have to built out resources every time you want a new one.
This looks awesome. I was just trying to figure out how to spin up my own definitions... it'd be great to not have to built out resources every time you want a new one.
Thanks! There are some open items I still need to document, and try and find solutions for. For example the valid responses for CFN params aren't documented which will make automated validation difficult.
What do you mean by "valid responses for CFN params"?
Sorry, without context that doesn’t make sense. I’ve been trying to implement more logic at the operator/CRD side since k8s can natively validate resources on request, at first glance this isn’t going to be possible with the CFN Resource spec, because I’m the schema there is no key for acceptable values, so if we have a spec.status which the CFN expects to be “enabled” or “disabled” and you set to “true” or “false” you won’t know until the CFN stack fails instead of getting that upfront
@christopherhein Ah, yes.
I wonder if it might be possible to pull some of those sorts of validations out of the API generator models...
As an example:
Amazon CloudFront Distribution LambdaFunctionAssociation has a field EventType, which is a String. But that string is constrained to be a valid value, which is defined in the API docs: LambdaFunctionAssociation.
Those values are: viewer-request
| viewer-response
| origin-request
| origin-response
I'm not precisely sure where to get the canonical versions of these model files... but they seem to be in the generated AWS API clients...
LambdaFunctionAssociation -> EventType -> EventType shape, which is:
"EventType":{
"type":"string",
"enum":[
"viewer-request",
"viewer-response",
"origin-request",
"origin-response"
]
}
I'll grant the path is a bit circuitous, and may not all be in structured forms. But there might be some potential here...
@jpeddicord Really great thoughts, will take some work to get them munging together but shouldn't be too difficult!
@jpeddicord Really great thoughts, will take some work to get them munging together but shouldn't be too difficult!
Think you meant @jlongtine ;P
That I did :) Thanks!
@christopherhein Great! I'd definitely be interested in helping build out some of this generation (presuming I can manage to find time in addition to my day job 😄).
@christopherhein Great! I'd definitely be interested in helping build out some of this generation (presuming I can manage to find time in addition to my day job 😄).
Awesome, I'll definitely take you up on that. I'm right now working on the guts of this change likely it won't include things like validation (#164) (also the OpenV3Schema) or defaulting (#163) once the guts are inplace maybe we can work on those other two?
Sounds good, @christopherhein 😄
@jlongtine found something that might be even better, we can contribute back to the cfn-linting project @cmmeyer pointed me to the CFN specs which they've been manually adding AllowedValues
as a key for the resources. It's not complete but it gives us a less hacky way of getting all the data.
Check out - https://github.com/awslabs/cfn-python-lint/issues/50 if you are interested in adding some of those maps I'm going to change my code generation to reference these.
@christopherhein That looks awesome! I'll see if I can make some time to help flesh this out.
the goformation project has go structures for all (?) cf resources, I guess they could be just marshalled from yaml, with some metadata added?
https://github.com/awslabs/goformation/tree/master/cloudformation/resources