decorator

package
v1.15.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2020 License: MIT Imports: 21 Imported by: 2

Documentation

Overview

Package decorator exposes Sparta decorator types to mutate the CloudFormation template

Index

Examples

Constants

View Source
const (
	// KeyCloudMapRef is the name of the property that contains the `Ref`
	// output from the CloudFormation resource
	KeyCloudMapRef = "Ref"
	// KeyCloudMapType is the name of the property that contains the CloudFormation
	// resource type of the published resource
	KeyCloudMapType = "Type"
	// KeyCloudMapResourceName is the logical CloudFormation resource name
	KeyCloudMapResourceName = "ResourceName"
)
View Source
const (
	// EnvVarCloudMapNamespaceID contains the CloudMap namespaceID that was
	// registered in this stack. This serviceID enables your lambda function
	// to call the https://docs.aws.amazon.com/sdk-for-go/api/service/servicediscovery
	// for listing or discovering instanes
	EnvVarCloudMapNamespaceID = "SPARTA_CLOUDMAP_NAMESPACE_ID"
	// EnvVarCloudMapServiceID contains the CloudMap serviceID that was
	// registered in this stack. This serviceID enables your lambda function
	// to call the https://docs.aws.amazon.com/sdk-for-go/api/service/servicediscovery
	// for listing or discovering instanes
	EnvVarCloudMapServiceID = "SPARTA_CLOUDMAP_SERVICE_ID"
)
View Source
const (
	// APIGatewayMappingEntry is the keyname used to store the API Gateway mappings
	APIGatewayMappingEntry = "APIGatewayMappings"
)
View Source
const (
	// OutputDashboardURL is the keyname used in the CloudFormation Output
	// that stores the CloudWatch Dashboard URL
	// @enum OutputKey
	OutputDashboardURL = "CloudWatchDashboardURL"
)

Variables

View Source
var LogAggregatorAssumePolicyDocument = sparta.ArbitraryJSONObject{
	"Version": "2012-10-17",
	"Statement": []sparta.ArbitraryJSONObject{
		{
			"Action": []string{"sts:AssumeRole"},
			"Effect": "Allow",
			"Principal": sparta.ArbitraryJSONObject{
				"Service": []string{
					"logs.us-west-2.amazonaws.com",
				},
			},
		},
	},
}

LogAggregatorAssumePolicyDocument is the document for LogSubscription filters

Functions

func APIGatewayDomainDecorator added in v1.9.2

func APIGatewayDomainDecorator(apiGateway *sparta.API,
	acmCertARN gocf.Stringable,
	basePath string,
	domainName string) sparta.ServiceDecoratorHookHandler

APIGatewayDomainDecorator returns a ServiceDecoratorHookHandler implementation that registers a custom domain for an API Gateway service

Example
helloWorld := func(ctx context.Context,
	gatewayEvent spartaAWSEvents.APIGatewayRequest) (interface{}, error) {
	return "Hello World", nil
}
lambdaFuncs := func(api *sparta.API) []*sparta.LambdaAWSInfo {
	var lambdaFunctions []*sparta.LambdaAWSInfo
	lambdaFn := sparta.HandleAWSLambda(sparta.LambdaName(helloWorld),
		helloWorld,
		sparta.IAMRoleDefinition{})
	apiGatewayResource, _ := api.NewResource("/hello", lambdaFn)

	// We only return http.StatusOK
	apiMethod, apiMethodErr := apiGatewayResource.NewMethod("GET",
		http.StatusOK,
		http.StatusInternalServerError)
	if nil != apiMethodErr {
		panic("Failed to create /hello resource: " + apiMethodErr.Error())
	}
	// The lambda resource only supports application/json Unmarshallable
	// requests.
	apiMethod.SupportedRequestContentTypes = []string{"application/json"}
	return append(lambdaFunctions, lambdaFn)
}

apigatewayHooks := func(apiGateway *sparta.API) *sparta.WorkflowHooks {
	hooks := &sparta.WorkflowHooks{}

	serviceDecorator := APIGatewayDomainDecorator(apiGateway,
		gocf.String("arn:aws:acm:us-west-2:123412341234:certificate/6486C3FF-A3B7-46B6-83A0-9AE329FEC4E3"),
		"", // Optional base path value
		"noice.spartademo.net")
	hooks.ServiceDecorators = []sparta.ServiceDecoratorHookHandler{
		serviceDecorator,
	}
	return hooks
}

// Register the function with the API Gateway
apiStage := sparta.NewStage("v1")

apiGateway := sparta.NewAPIGateway("SpartaHTMLDomain", apiStage)
apiGateway.EndpointConfiguration = &gocf.APIGatewayRestAPIEndpointConfiguration{
	Types: gocf.StringList(
		gocf.String("REGIONAL"),
	),
}
hooks := apigatewayHooks(apiGateway)
// Deploy it
stackName := spartaCF.UserScopedStackName("CustomAPIGateway")
sparta.MainEx(stackName,
	"CustomAPIGateway defines a stack with a custom APIGateway Domain Name",
	lambdaFuncs(apiGateway),
	apiGateway,
	nil,
	hooks,
	false)
Output:

func CloudFrontSiteDistributionDecorator added in v1.4.0

func CloudFrontSiteDistributionDecorator(s3Site *sparta.S3Site,
	subdomain string,
	domainName string,
	acmCertificateARN gocf.Stringable) sparta.ServiceDecoratorHookHandler

CloudFrontSiteDistributionDecorator returns a CloudFrontSiteDecorator with the default VIP certificate. NOTE: The default VIP certificate is expensive. Consider using SNI to reduce costs. See https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html#cfn-cloudfront-distribution-viewercertificate-sslsupportmethod for more information.

func CloudFrontSiteDistributionDecoratorWithCert added in v1.9.4

func CloudFrontSiteDistributionDecoratorWithCert(s3Site *sparta.S3Site,
	subdomain string,
	domainName string,
	cert *gocf.CloudFrontDistributionViewerCertificate) sparta.ServiceDecoratorHookHandler

CloudFrontSiteDistributionDecoratorWithCert returns a ServiceDecoratorHookHandler function that provisions a CloudFront distribution whose origin is the supplied S3Site bucket. The supplied viewer certificate allows customization of the CloudFront Distribution SSL options. See https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-viewercertificate.html for more information.

func CloudWatchErrorAlarmDecorator added in v1.4.0

func CloudWatchErrorAlarmDecorator(periodWindow int,
	minutesPerPeriod int,
	thresholdGreaterThanOrEqualToValue int,
	snsTopic gocf.Stringable) sparta.TemplateDecoratorHookFunc

CloudWatchErrorAlarmDecorator returns a TemplateDecoratorHookFunc that associates a CloudWatch Lambda Error count alarm with the given lambda function. The four parameters are periodWindow, minutes per period the strict lower bound value, and the SNS topic to which alerts should be sent. See the CloudWatch alarm resource type in the official AWS documentation at https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html for more information

func CodeDeployServiceUpdateDecorator

func CodeDeployServiceUpdateDecorator(updateType string,
	lambdaFuncs []*sparta.LambdaAWSInfo,
	preHook *sparta.LambdaAWSInfo,
	postHook *sparta.LambdaAWSInfo) sparta.ServiceDecoratorHookFunc

CodeDeployServiceUpdateDecorator is a service level decorator that attaches the CodeDeploy safe update to an upgrade operation. Ref: https://github.com/awslabs/serverless-application-model/blob/master/docs/safe_lambda_deployments.rst

func DashboardDecorator

func DashboardDecorator(lambdaAWSInfo []*sparta.LambdaAWSInfo,
	timeSeriesPeriod int) sparta.ServiceDecoratorHookFunc

DashboardDecorator returns a ServiceDecoratorHook function that can be attached the workflow to create a dashboard

func DiscoverInstances added in v1.9.3

func DiscoverInstances(attributes map[string]string,
	logger *logrus.Logger) ([]*servicediscovery.HttpInstanceSummary, error)

DiscoverInstances returns the HttpInstanceSummary items that match the given attribute map

func DiscoverInstancesInServiceWithContext added in v1.9.3

func DiscoverInstancesInServiceWithContext(ctx context.Context,
	namespaceName string,
	serviceName string,
	attributes map[string]string,
	logger *logrus.Logger) ([]*servicediscovery.HttpInstanceSummary, error)

DiscoverInstancesInServiceWithContext returns the HttpInstanceSummary items that match the given attribute map using the supplied context and within the given ServiceID

func DiscoverInstancesWithContext added in v1.9.3

func DiscoverInstancesWithContext(ctx context.Context,
	attributes map[string]string,
	logger *logrus.Logger) ([]*servicediscovery.HttpInstanceSummary, error)

DiscoverInstancesWithContext returns the HttpInstanceSummary items that match the given attribute map for the default service provisioned with this application

func LambdaVersioningDecorator added in v1.4.0

func LambdaVersioningDecorator() sparta.TemplateDecoratorHookFunc

LambdaVersioningDecorator returns a TemplateDecorator that is responsible for including a versioning resource with the given lambda function

func PublishAllResourceOutputs added in v1.8.0

func PublishAllResourceOutputs(cfResourceName string,
	cfResource gocf.ResourceProperties) sparta.ServiceDecoratorHookFunc

PublishAllResourceOutputs is a utility function to include all Ref and Att outputs associated with the given (cfResourceName, cfResource) pair.

func PublishAttOutputDecorator

func PublishAttOutputDecorator(keyName string, description string, fieldName string) sparta.TemplateDecoratorHookFunc

PublishAttOutputDecorator returns a TemplateDecoratorHookFunc that publishes an Att value for a given Lambda

func PublishRefOutputDecorator

func PublishRefOutputDecorator(keyName string, description string) sparta.TemplateDecoratorHookFunc

PublishRefOutputDecorator returns an TemplateDecoratorHookFunc that publishes the Ref value for a given lambda

func S3ArtifactPublisherDecorator added in v1.4.0

func S3ArtifactPublisherDecorator(bucket gocf.Stringable,
	key gocf.Stringable,
	data map[string]interface{}) sparta.ServiceDecoratorHookHandler

S3ArtifactPublisherDecorator returns a ServiceDecoratorHookHandler function that publishes the given data to an S3 Bucket using the given bucket and key.

Types

type ApplicationLoadBalancerDecorator added in v1.10.0

type ApplicationLoadBalancerDecorator struct {
	Resources map[string]gocf.ResourceProperties
	// contains filtered or unexported fields
}

ApplicationLoadBalancerDecorator is an instance of a service decorator that handles registering Lambda functions with an Application Load Balancer.

func NewApplicationLoadBalancerDecorator added in v1.10.0

func NewApplicationLoadBalancerDecorator(alb *gocf.ElasticLoadBalancingV2LoadBalancer,
	port int64,
	protocol string,
	defaultLambdaHandler *sparta.LambdaAWSInfo) (*ApplicationLoadBalancerDecorator, error)

NewApplicationLoadBalancerDecorator returns an application load balancer decorator that allows one or more lambda functions to be marked as ALB targets

func (*ApplicationLoadBalancerDecorator) AddConditionalEntry added in v1.10.0

AddConditionalEntry adds a new lambda target that is conditionally routed to depending on the condition value.

func (*ApplicationLoadBalancerDecorator) AddConditionalEntryWithPriority added in v1.10.0

AddConditionalEntryWithPriority adds a new lambda target that is conditionally routed to depending on the condition value using the user supplied priority value

func (*ApplicationLoadBalancerDecorator) AddMultiConditionalEntry added in v1.10.0

AddMultiConditionalEntry adds a new lambda target that is conditionally routed to depending on the multi condition value.

func (*ApplicationLoadBalancerDecorator) AddMultiConditionalEntryWithPriority added in v1.10.0

AddMultiConditionalEntryWithPriority adds a new lambda target that is conditionally routed to depending on the multi condition value with the given priority index

func (*ApplicationLoadBalancerDecorator) DecorateService added in v1.10.0

func (albd *ApplicationLoadBalancerDecorator) DecorateService(context map[string]interface{},
	serviceName string,
	template *gocf.Template,
	S3Bucket string,
	S3Key string,
	buildID string,
	awsSession *session.Session,
	noop bool,
	logger *logrus.Logger) error

DecorateService satisfies the ServiceDecoratorHookHandler interface

func (*ApplicationLoadBalancerDecorator) LogicalResourceName added in v1.10.0

func (albd *ApplicationLoadBalancerDecorator) LogicalResourceName() string

LogicalResourceName returns the CloudFormation resource name of the primary ALB

type CloudMapServiceDecorator added in v1.9.3

type CloudMapServiceDecorator struct {
	Description gocf.Stringable
	// contains filtered or unexported fields
}

CloudMapServiceDecorator is an instance of a service decorator that publishes CloudMap info

func NewCloudMapServiceDecorator added in v1.9.3

func NewCloudMapServiceDecorator(namespaceID gocf.Stringable,
	serviceName gocf.Stringable) (*CloudMapServiceDecorator, error)

NewCloudMapServiceDecorator returns an instance of CloudMapServiceDecorator which can be used to publish information into CloudMap

func (*CloudMapServiceDecorator) DecorateService added in v1.9.3

func (cmsd *CloudMapServiceDecorator) DecorateService(context map[string]interface{},
	serviceName string,
	template *gocf.Template,
	S3Bucket string,
	S3Key string,
	buildID string,
	awsSession *session.Session,
	noop bool,
	logger *logrus.Logger) error

DecorateService satisfies the ServiceDecoratorHookHandler interface

func (*CloudMapServiceDecorator) EnableDiscoverySupport added in v1.9.3

func (cmsd *CloudMapServiceDecorator) EnableDiscoverySupport(lambdaInfo *sparta.LambdaAWSInfo,
	additionalServiceIDs ...string) error

EnableDiscoverySupport enables the IAM privs for the CloudMap ServiceID created by this stack as well as any additional serviceIDs

func (*CloudMapServiceDecorator) LogicalResourceName added in v1.9.3

func (cmsd *CloudMapServiceDecorator) LogicalResourceName() string

LogicalResourceName returns the CloudFormation Logical resource name that can be used to get information about the generated CloudFormation resource

func (*CloudMapServiceDecorator) PublishLambda added in v1.9.3

func (cmsd *CloudMapServiceDecorator) PublishLambda(lookupName string,
	lambdaInfo *sparta.LambdaAWSInfo,
	additionalAttributes map[string]interface{}) error

PublishLambda publishes the known outputs for the given sparta AWS Lambda function

func (*CloudMapServiceDecorator) PublishResource added in v1.9.3

func (cmsd *CloudMapServiceDecorator) PublishResource(lookupName string,
	resourceName string,
	resource gocf.ResourceProperties,
	addditionalProperties map[string]interface{}) error

PublishResource publishes the known outputs and attributes for the given ResourceProperties instance

type DashboardTemplateData

type DashboardTemplateData struct {
	// The list of lambda functions
	LambdaFunctions []*LambdaTemplateData
	// SpartaVersion is the Sparta library used to provision this service
	SpartaVersion string
	// SpartaGitHash is the commit hash of this version of the library
	SpartaGitHash    string
	TimeSeriesPeriod int
	Extents          widgetExtents
}

DashboardTemplateData is the object supplied to the dashboard template to generate the resulting dashboard

type LambdaTemplateData

type LambdaTemplateData struct {
	LambdaAWSInfo *sparta.LambdaAWSInfo
	ResourceName  string
}

LambdaTemplateData is the mapping of Sparta public LambdaAWSInfo together with the CloudFormationResource name this resource uses

type LogAggregatorDecorator

type LogAggregatorDecorator struct {
	// contains filtered or unexported fields
}

LogAggregatorDecorator is the decorator that satisfies both the ServiceDecoratorHandler and TemplateDecoratorHandler interfaces. It ensures that each lambda function has a CloudWatch logs subscription that forwards to a Kinesis stream. That stream is then subscribed to by the relay lambda function. Only log statements of level info or higher are published to Kinesis.

func NewLogAggregatorDecorator

func NewLogAggregatorDecorator(
	kinesisResource *gocf.KinesisStream,
	kinesisMapping *sparta.EventSourceMapping,
	relay *sparta.LambdaAWSInfo) *LogAggregatorDecorator

NewLogAggregatorDecorator returns a ServiceDecoratorHook that registers a Kinesis stream lambda log aggregator

func (*LogAggregatorDecorator) DecorateService

func (lad *LogAggregatorDecorator) DecorateService(context map[string]interface{},
	serviceName string,
	template *gocf.Template,
	S3Bucket string,
	S3Key string,
	buildID string,
	awsSession *session.Session,
	noop bool,
	logger *logrus.Logger) error

DecorateService annotates the service with the Kinesis hook

func (*LogAggregatorDecorator) DecorateTemplate

func (lad *LogAggregatorDecorator) DecorateTemplate(serviceName string,
	lambdaResourceName string,
	lambdaResource gocf.LambdaFunction,
	resourceMetadata map[string]interface{},
	S3Bucket string,
	S3Key string,
	buildID string,
	template *gocf.Template,
	context map[string]interface{},
	logger *logrus.Logger) error

DecorateTemplate annotates the lambda with the log forwarding sink info

func (*LogAggregatorDecorator) KinesisLogicalResourceName

func (lad *LogAggregatorDecorator) KinesisLogicalResourceName() string

KinesisLogicalResourceName returns the name of the Kinesis stream that will be provisioned by this Decorator

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL