Documentation ¶
Overview ¶
Package decorator exposes Sparta decorator types to mutate the CloudFormation template
Index ¶
- Constants
- Variables
- func APIGatewayDomainDecorator(apiGateway *sparta.API, acmCertARN gocf.Stringable, basePath string, ...) sparta.ServiceDecoratorHookHandler
- func CloudFrontSiteDistributionDecorator(s3Site *sparta.S3Site, subdomain string, domainName string, ...) sparta.ServiceDecoratorHookHandler
- func CloudWatchErrorAlarmDecorator(periodWindow int, minutesPerPeriod int, thresholdGreaterThanOrEqualToValue int, ...) sparta.TemplateDecoratorHookFunc
- func CodeDeployServiceUpdateDecorator(updateType string, lambdaFuncs []*sparta.LambdaAWSInfo, ...) sparta.ServiceDecoratorHookFunc
- func DashboardDecorator(lambdaAWSInfo []*sparta.LambdaAWSInfo, timeSeriesPeriod int) sparta.ServiceDecoratorHookFunc
- func DiscoverInstances(attributes map[string]string, logger *logrus.Logger) ([]*servicediscovery.HttpInstanceSummary, error)
- func DiscoverInstancesInServiceWithContext(ctx context.Context, namespaceName string, serviceName string, ...) ([]*servicediscovery.HttpInstanceSummary, error)
- func DiscoverInstancesWithContext(ctx context.Context, attributes map[string]string, logger *logrus.Logger) ([]*servicediscovery.HttpInstanceSummary, error)
- func LambdaVersioningDecorator() sparta.TemplateDecoratorHookFunc
- func PublishAllResourceOutputs(cfResourceName string, cfResource gocf.ResourceProperties) sparta.ServiceDecoratorHookFunc
- func PublishAttOutputDecorator(keyName string, description string, fieldName string) sparta.TemplateDecoratorHookFunc
- func PublishRefOutputDecorator(keyName string, description string) sparta.TemplateDecoratorHookFunc
- func S3ArtifactPublisherDecorator(bucket gocf.Stringable, key gocf.Stringable, data map[string]interface{}) sparta.ServiceDecoratorHookHandler
- type CloudMapServiceDecorator
- func (cmsd *CloudMapServiceDecorator) DecorateService(context map[string]interface{}, serviceName string, template *gocf.Template, ...) error
- func (cmsd *CloudMapServiceDecorator) EnableDiscoverySupport(lambdaInfo *sparta.LambdaAWSInfo, additionalServiceIDs ...string) error
- func (cmsd *CloudMapServiceDecorator) LogicalResourceName() string
- func (cmsd *CloudMapServiceDecorator) PublishLambda(lookupName string, lambdaInfo *sparta.LambdaAWSInfo, ...) error
- func (cmsd *CloudMapServiceDecorator) PublishResource(lookupName string, resourceName string, resource gocf.ResourceProperties, ...) error
- type DashboardTemplateData
- type LambdaTemplateData
- type LogAggregatorDecorator
- func (lad *LogAggregatorDecorator) DecorateService(context map[string]interface{}, serviceName string, template *gocf.Template, ...) error
- func (lad *LogAggregatorDecorator) DecorateTemplate(serviceName string, lambdaResourceName string, ...) error
- func (lad *LogAggregatorDecorator) KinesisLogicalResourceName() string
Examples ¶
Constants ¶
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" )
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" )
const (
// APIGatewayMappingEntry is the keyname used to store the API Gateway mappings
APIGatewayMappingEntry = "APIGatewayMappings"
)
const ( // OutputDashboardURL is the keyname used in the CloudFormation Output // that stores the CloudWatch Dashboard URL // @enum OutputKey OutputDashboardURL = "CloudWatchDashboardURL" )
Variables ¶
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, fmt.Sprintf("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 ServiceDecoratorHookHandler function that provisions a CloudFront distribution whose origin is the supplied S3Site bucket. If the acmCertificateARN value is non-nil, the CloudFront distribution will support SSL access via the ViewerCertificate struct
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 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