From 741228d6923ea10f1d22a901bbddf106d5c71cd7 Mon Sep 17 00:00:00 2001 From: Cedric Date: Tue, 21 Jul 2020 15:21:16 +0100 Subject: [PATCH] feat(schema): Add new DynamoDBEvent options (#289) Co-authored-by: Cedric Cordenier --- ...s-serverless-function_destinationconfig.go | 35 ++++++++++ .../aws-serverless-function_dynamodbevent.go | 30 +++++++++ .../aws-serverless-function_onfailure.go | 40 +++++++++++ generate/sam-2016-10-31.json | 66 ++++++++++++++++++- schema/sam.go | 45 +++++++++++++ schema/sam.schema.json | 45 +++++++++++++ 6 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 cloudformation/serverless/aws-serverless-function_destinationconfig.go create mode 100644 cloudformation/serverless/aws-serverless-function_onfailure.go diff --git a/cloudformation/serverless/aws-serverless-function_destinationconfig.go b/cloudformation/serverless/aws-serverless-function_destinationconfig.go new file mode 100644 index 0000000000..e33a9ced9e --- /dev/null +++ b/cloudformation/serverless/aws-serverless-function_destinationconfig.go @@ -0,0 +1,35 @@ +package serverless + +import ( + "github.com/awslabs/goformation/v4/cloudformation/policies" +) + +// Function_DestinationConfig AWS CloudFormation Resource (AWS::Serverless::Function.DestinationConfig) +// See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object +type Function_DestinationConfig struct { + + // OnFailure AWS CloudFormation Property + // Required: true + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object + OnFailure *Function_OnFailure `json:"OnFailure,omitempty"` + + // AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy + AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"` + + // AWSCloudFormationUpdateReplacePolicy represents a CloudFormation UpdateReplacePolicy + AWSCloudFormationUpdateReplacePolicy policies.UpdateReplacePolicy `json:"-"` + + // AWSCloudFormationDependsOn stores the logical ID of the resources to be created before this resource + AWSCloudFormationDependsOn []string `json:"-"` + + // AWSCloudFormationMetadata stores structured data associated with this resource + AWSCloudFormationMetadata map[string]interface{} `json:"-"` + + // AWSCloudFormationCondition stores the logical ID of the condition that must be satisfied for this resource to be created + AWSCloudFormationCondition string `json:"-"` +} + +// AWSCloudFormationType returns the AWS CloudFormation resource type +func (r *Function_DestinationConfig) AWSCloudFormationType() string { + return "AWS::Serverless::Function.DestinationConfig" +} diff --git a/cloudformation/serverless/aws-serverless-function_dynamodbevent.go b/cloudformation/serverless/aws-serverless-function_dynamodbevent.go index 3a2d2f466c..e462efb16c 100644 --- a/cloudformation/serverless/aws-serverless-function_dynamodbevent.go +++ b/cloudformation/serverless/aws-serverless-function_dynamodbevent.go @@ -13,11 +13,41 @@ type Function_DynamoDBEvent struct { // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb BatchSize int `json:"BatchSize,omitempty"` + // BisectBatchOnFunctionError AWS CloudFormation Property + // Required: false + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb + BisectBatchOnFunctionError bool `json:"BisectBatchOnFunctionError,omitempty"` + + // DestinationConfig AWS CloudFormation Property + // Required: false + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb + DestinationConfig *Function_DestinationConfig `json:"DestinationConfig,omitempty"` + // Enabled AWS CloudFormation Property // Required: false // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb Enabled bool `json:"Enabled,omitempty"` + // MaximumBatchingWindowInSeconds AWS CloudFormation Property + // Required: false + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb + MaximumBatchingWindowInSeconds int `json:"MaximumBatchingWindowInSeconds,omitempty"` + + // MaximumRecordAgeInSeconds AWS CloudFormation Property + // Required: false + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb + MaximumRecordAgeInSeconds int `json:"MaximumRecordAgeInSeconds,omitempty"` + + // MaximumRetryAttempts AWS CloudFormation Property + // Required: false + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb + MaximumRetryAttempts int `json:"MaximumRetryAttempts,omitempty"` + + // ParallelizationFactor AWS CloudFormation Property + // Required: false + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb + ParallelizationFactor int `json:"ParallelizationFactor,omitempty"` + // StartingPosition AWS CloudFormation Property // Required: true // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb diff --git a/cloudformation/serverless/aws-serverless-function_onfailure.go b/cloudformation/serverless/aws-serverless-function_onfailure.go new file mode 100644 index 0000000000..8cc7c1462b --- /dev/null +++ b/cloudformation/serverless/aws-serverless-function_onfailure.go @@ -0,0 +1,40 @@ +package serverless + +import ( + "github.com/awslabs/goformation/v4/cloudformation/policies" +) + +// Function_OnFailure AWS CloudFormation Resource (AWS::Serverless::Function.OnFailure) +// See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object +type Function_OnFailure struct { + + // Destination AWS CloudFormation Property + // Required: true + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object + Destination string `json:"Destination,omitempty"` + + // Type AWS CloudFormation Property + // Required: false + // See: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object + Type string `json:"Type,omitempty"` + + // AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy + AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"` + + // AWSCloudFormationUpdateReplacePolicy represents a CloudFormation UpdateReplacePolicy + AWSCloudFormationUpdateReplacePolicy policies.UpdateReplacePolicy `json:"-"` + + // AWSCloudFormationDependsOn stores the logical ID of the resources to be created before this resource + AWSCloudFormationDependsOn []string `json:"-"` + + // AWSCloudFormationMetadata stores structured data associated with this resource + AWSCloudFormationMetadata map[string]interface{} `json:"-"` + + // AWSCloudFormationCondition stores the logical ID of the condition that must be satisfied for this resource to be created + AWSCloudFormationCondition string `json:"-"` +} + +// AWSCloudFormationType returns the AWS CloudFormation resource type +func (r *Function_OnFailure) AWSCloudFormationType() string { + return "AWS::Serverless::Function.OnFailure" +} diff --git a/generate/sam-2016-10-31.json b/generate/sam-2016-10-31.json index 318ea996f0..d73edf895a 100644 --- a/generate/sam-2016-10-31.json +++ b/generate/sam-2016-10-31.json @@ -558,7 +558,43 @@ "Required": false, "PrimitiveType": "Boolean", "UpdateType": "Immutable" - } + }, + "MaximumBatchingWindowInSeconds": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb", + "Required": false, + "PrimitiveType": "Integer", + "UpdateType": "Immutable" + }, + "MaximumRetryAttempts": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb", + "Required": false, + "PrimitiveType": "Integer", + "UpdateType": "Immutable" + }, + "BisectBatchOnFunctionError": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb", + "Required": false, + "PrimitiveType": "Boolean", + "UpdateType": "Immutable" + }, + "MaximumRecordAgeInSeconds": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb", + "Required": false, + "PrimitiveType": "Integer", + "UpdateType": "Immutable" + }, + "DestinationConfig": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb", + "Required": false, + "Type": "DestinationConfig", + "UpdateType": "Immutable" + }, + "ParallelizationFactor": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#dynamodb", + "Required": false, + "PrimitiveType": "Integer", + "UpdateType": "Immutable" + } } }, "AWS::Serverless::Function.SQSEvent": { @@ -693,6 +729,34 @@ } } }, + "AWS::Serverless::Function.DestinationConfig": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object", + "Properties": { + "OnFailure": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object", + "Required": true, + "Type": "OnFailure", + "UpdateType": "Immutable" + } + } + }, + "AWS::Serverless::Function.OnFailure": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object", + "Properties": { + "Type": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object", + "Required": false, + "PrimitiveType": "String", + "UpdateType": "Immutable" + }, + "Destination": { + "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#destination-config-object", + "Required": true, + "PrimitiveType": "String", + "UpdateType": "Immutable" + } + } + }, "AWS::Serverless::Function.EventBridgeRuleEvent": { "Documentation": "https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#eventbridgerule", "Properties": { diff --git a/schema/sam.go b/schema/sam.go index 7750f73702..183ecfee30 100644 --- a/schema/sam.go +++ b/schema/sam.go @@ -63768,6 +63768,18 @@ var SamSchema = `{ }, "type": "object" }, + "AWS::Serverless::Function.DestinationConfig": { + "additionalProperties": false, + "properties": { + "OnFailure": { + "$ref": "#/definitions/AWS::Serverless::Function.OnFailure" + } + }, + "required": [ + "OnFailure" + ], + "type": "object" + }, "AWS::Serverless::Function.DomainSAMPT": { "additionalProperties": false, "properties": { @@ -63786,9 +63798,27 @@ var SamSchema = `{ "BatchSize": { "type": "number" }, + "BisectBatchOnFunctionError": { + "type": "boolean" + }, + "DestinationConfig": { + "$ref": "#/definitions/AWS::Serverless::Function.DestinationConfig" + }, "Enabled": { "type": "boolean" }, + "MaximumBatchingWindowInSeconds": { + "type": "number" + }, + "MaximumRecordAgeInSeconds": { + "type": "number" + }, + "MaximumRetryAttempts": { + "type": "number" + }, + "ParallelizationFactor": { + "type": "number" + }, "StartingPosition": { "type": "string" }, @@ -63996,6 +64026,21 @@ var SamSchema = `{ ], "type": "object" }, + "AWS::Serverless::Function.OnFailure": { + "additionalProperties": false, + "properties": { + "Destination": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Destination" + ], + "type": "object" + }, "AWS::Serverless::Function.QueueSAMPT": { "additionalProperties": false, "properties": { diff --git a/schema/sam.schema.json b/schema/sam.schema.json index ca35509fe4..d7b07e2743 100644 --- a/schema/sam.schema.json +++ b/schema/sam.schema.json @@ -63765,6 +63765,18 @@ }, "type": "object" }, + "AWS::Serverless::Function.DestinationConfig": { + "additionalProperties": false, + "properties": { + "OnFailure": { + "$ref": "#/definitions/AWS::Serverless::Function.OnFailure" + } + }, + "required": [ + "OnFailure" + ], + "type": "object" + }, "AWS::Serverless::Function.DomainSAMPT": { "additionalProperties": false, "properties": { @@ -63783,9 +63795,27 @@ "BatchSize": { "type": "number" }, + "BisectBatchOnFunctionError": { + "type": "boolean" + }, + "DestinationConfig": { + "$ref": "#/definitions/AWS::Serverless::Function.DestinationConfig" + }, "Enabled": { "type": "boolean" }, + "MaximumBatchingWindowInSeconds": { + "type": "number" + }, + "MaximumRecordAgeInSeconds": { + "type": "number" + }, + "MaximumRetryAttempts": { + "type": "number" + }, + "ParallelizationFactor": { + "type": "number" + }, "StartingPosition": { "type": "string" }, @@ -63993,6 +64023,21 @@ ], "type": "object" }, + "AWS::Serverless::Function.OnFailure": { + "additionalProperties": false, + "properties": { + "Destination": { + "type": "string" + }, + "Type": { + "type": "string" + } + }, + "required": [ + "Destination" + ], + "type": "object" + }, "AWS::Serverless::Function.QueueSAMPT": { "additionalProperties": false, "properties": {