github.com/mweagle/Sparta@v1.15.0/docs/index.xml (about)

     1  <?xml version="1.0" encoding="utf-8" standalone="yes"?>
     2  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
     3    <channel>
     4      <title>Sparta - AWS Lambda Microservices</title>
     5      <link>/</link>
     6      <description>Recent content on Sparta - AWS Lambda Microservices</description>
     7      <generator>Hugo -- gohugo.io</generator>
     8      <language>en-US</language>
     9      <lastBuildDate>Tue, 08 Mar 2016 21:07:13 +0100</lastBuildDate>
    10      
    11  	<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    12      
    13      
    14      <item>
    15        <title>Magefiles</title>
    16        <link>/reference/operations/magefile/</link>
    17        <pubDate>Wed, 28 Nov 2018 16:17:43 +0000</pubDate>
    18        
    19        <guid>/reference/operations/magefile/</guid>
    20        <description>Magefile To support cross platform development and usage, Sparta uses magefiles rather than Makefiles. Most projects can start with the magefile.go sample below. The Magefiles provide a discoverable CLI, but are entirely optional. go run main.go XXXX style invocation remains available as well.
    21  Default Sparta magefile.go This magefile.go can be used, unchanged, for most standard Sparta projects.
    22  // +build mage  // File: magefile.go  package main import ( spartaMage &amp;#34;github.</description>
    23      </item>
    24      
    25      <item>
    26        <title>Event Bridge</title>
    27        <link>/reference/archetypes/event_bridge/</link>
    28        <pubDate>Sat, 22 Feb 2020 17:36:59 +0000</pubDate>
    29        
    30        <guid>/reference/archetypes/event_bridge/</guid>
    31        <description>The EventBridge lambda event source allows you to trigger lambda functions in response to either cron schedules or account events. There are two different archetype functions available.
    32  Scheduled Scheduled Lambdas execute either at fixed times or periodically depending on the schedule expression.
    33  To create a scheduled function use a constructor as in:
    34  import ( spartaArchetype &amp;#34;github.com/mweagle/Sparta/archetype&amp;#34; ) // EventBridge reactor function func echoEventBridgeEvent(ctx context.Context, msg json.RawMessage) (interface{}, error) { logger, _ := ctx.</description>
    35      </item>
    36      
    37      <item>
    38        <title>Application Load Balancer</title>
    39        <link>/reference/decorators/application_load_balancer/</link>
    40        <pubDate>Sat, 10 Aug 2019 14:59:12 +0000</pubDate>
    41        
    42        <guid>/reference/decorators/application_load_balancer/</guid>
    43        <description>The ApplicationLoadBalancerDecorator allows you to expose lambda functions as Application Load Balancer targets.
    44  This can be useful to provide HTTP(S) access to one or more Lambda functions without requiring an API-Gateway service.
    45  Lambda Function Application Load Balancer (ALB) lambda targets must satisfy a prescribed Lambda signature:
    46  import ( awsEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; ) func(context.Context, awsEvents.ALBTargetGroupRequest) awsEvents.ALBTargetGroupResponse See the ALBTargetGroupRequest and ALBTargetGroupResponse godoc entries for more information.
    47  An example ALB-eligible target function might look like:</description>
    48      </item>
    49      
    50      <item>
    51        <title>CloudMap Service Discovery</title>
    52        <link>/reference/decorators/cloudmap/</link>
    53        <pubDate>Mon, 27 May 2019 22:31:25 +0000</pubDate>
    54        
    55        <guid>/reference/decorators/cloudmap/</guid>
    56        <description>The CloudMapServiceDecorator allows your service to register a service instance for your application.
    57  For example, an application that provisions a SQS queue and an AWS Lambda function that consumes messages from that queue may need a way for the Lambda function to discover the dynamically provisioned queue.
    58  Sparta supports an environment-based discovery service but that discovery is limited to a single Service.
    59  The CloudMapServiceDecorator leverages the CloudMap service to support intra- and inter-service resource discovery.</description>
    60      </item>
    61      
    62      <item>
    63        <title>CodeCommit</title>
    64        <link>/reference/archetypes/codecommit/</link>
    65        <pubDate>Thu, 31 Jan 2019 05:47:27 +0000</pubDate>
    66        
    67        <guid>/reference/archetypes/codecommit/</guid>
    68        <description>The CodeCommit Lambda event source allows you to trigger lambda functions in response to CodeCommit repository events.
    69  Events Lambda functions triggered in response to CodeCommit evetms use a combination of events and branches to manage which state changes trigger your lambda function.
    70  To create an event subscriber use a constructor as in:
    71  // CodeCommit reactor function func reactorFunc(ctx context.Context, event awsLambdaEvents.CodeCommitEvent) (interface{}, error) { logger, _ := ctx.Value(sparta.ContextKeyRequestLogger).(*logrus.Entry) logger.WithFields(logrus.Fields{ &amp;#34;Event&amp;#34;: event, }).</description>
    72      </item>
    73      
    74      <item>
    75        <title>CodeCommit</title>
    76        <link>/reference/eventsources/codecommit/</link>
    77        <pubDate>Thu, 31 Jan 2019 05:44:32 +0000</pubDate>
    78        
    79        <guid>/reference/eventsources/codecommit/</guid>
    80        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to CodeCommit Events.
    81  Goal Assume that we&amp;rsquo;re supposed to write a Lambda function that is triggered in response to any event emitted by a CodeCommit repository.
    82  Getting Started Our lambda function is relatively short:
    83  import ( awsLambdaEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; ) func echoCodeCommit(ctx context.Context, event awsLambdaEvents.CodeCommitEvent) (interface{}, error) { logger, _ := ctx.Value(sparta.ContextKeyRequestLogger).(*logrus.Entry) logger.WithFields(logrus.Fields{ &amp;#34;Event&amp;#34;: event, }).Info(&amp;#34;Event received&amp;#34;) return &amp;amp;event, nil } Our lambda function doesn&amp;rsquo;t need to do much with the repository message other than log and return it.</description>
    84      </item>
    85      
    86      <item>
    87        <title>Amazon DynamoDb</title>
    88        <link>/reference/step/services/dynamodb/</link>
    89        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
    90        
    91        <guid>/reference/step/services/dynamodb/</guid>
    92        <description> TODO: Document Dynamo integration.
    93   </description>
    94      </item>
    95      
    96      <item>
    97        <title>Amazon SageMaker</title>
    98        <link>/reference/step/services/sagemaker/</link>
    99        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
   100        
   101        <guid>/reference/step/services/sagemaker/</guid>
   102        <description> TODO: Document SageMaker integration.
   103   </description>
   104      </item>
   105      
   106      <item>
   107        <title>Amazon SNS</title>
   108        <link>/reference/step/services/sns/</link>
   109        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
   110        
   111        <guid>/reference/step/services/sns/</guid>
   112        <description> TODO: Document SNS integration.
   113   </description>
   114      </item>
   115      
   116      <item>
   117        <title>Amazon SQS</title>
   118        <link>/reference/step/services/sqs/</link>
   119        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
   120        
   121        <guid>/reference/step/services/sqs/</guid>
   122        <description> TODO: Document SQS integration.
   123   </description>
   124      </item>
   125      
   126      <item>
   127        <title>AWS Batch</title>
   128        <link>/reference/step/services/batch/</link>
   129        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
   130        
   131        <guid>/reference/step/services/batch/</guid>
   132        <description> TODO: Document Batch integration.
   133   </description>
   134      </item>
   135      
   136      <item>
   137        <title>AWS Fargate</title>
   138        <link>/reference/step/services/fargate/</link>
   139        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
   140        
   141        <guid>/reference/step/services/fargate/</guid>
   142        <description> TODO: Document Fargate integration.
   143   </description>
   144      </item>
   145      
   146      <item>
   147        <title>AWS Glue</title>
   148        <link>/reference/step/services/glue/</link>
   149        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
   150        
   151        <guid>/reference/step/services/glue/</guid>
   152        <description> TODO: Document Glue integration.
   153   </description>
   154      </item>
   155      
   156      <item>
   157        <title>Lambda</title>
   158        <link>/reference/step/lambda/</link>
   159        <pubDate>Mon, 10 Dec 2018 21:45:23 +0000</pubDate>
   160        
   161        <guid>/reference/step/lambda/</guid>
   162        <description>Step Functions AWS Step Functions are a powerful way to express long-running, complex workflows comprised of Lambda functions. With Sparta 0.20.2, you can build a State Machine as part of your application. This section walks through the three steps necessary to provision a sample &amp;ldquo;Roll Die&amp;rdquo; state machine using a single Lambda function. See SpartaStep for the full source.
   163  Lambda Functions The first step is to define the core Lambda function Task that will be our Step function&amp;rsquo;s core logic.</description>
   164      </item>
   165      
   166      <item>
   167        <title>XRayInterceptor</title>
   168        <link>/reference/interceptors/xray_interceptor/</link>
   169        <pubDate>Sat, 01 Dec 2018 06:24:24 +0000</pubDate>
   170        
   171        <guid>/reference/interceptors/xray_interceptor/</guid>
   172        <description>TODO: Document the XRayInterceptor
   173   🎉 Sparta v1.7.0: The Time Machine Edition 🕰 🎉 For those times when you wish you could go back in time and enable debug logging for a single request.https://t.co/BP60qQpKva#serverless #go
   174  &amp;mdash; Matt Weagle (@mweagle) November 12, 2018  Sparta v1.7.0 adds `Interceptors`: user defined hooks called during the lambda event handling flow to support cross-cutting concerns. The first interceptor is an XRay annotation and metadata interceptor.</description>
   175      </item>
   176      
   177      <item>
   178        <title>CloudWatch</title>
   179        <link>/reference/archetypes/cloudwatch/</link>
   180        <pubDate>Wed, 28 Nov 2018 20:03:46 +0000</pubDate>
   181        
   182        <guid>/reference/archetypes/cloudwatch/</guid>
   183        <description>The CloudWatch Logs Lambda event source allows you to trigger lambda functions in response to either cron schedules or account events. There are three different archetype functions available.
   184  Scheduled Scheduled Lambdas execute either at fixed times or periodically depending on the schedule expression.
   185  To create a scheduled function use a constructor as in:
   186  import ( awsLambdaEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; spartaArchetype &amp;#34;github.com/mweagle/Sparta/archetype&amp;#34; ) // CloudWatch reactor function func reactorFunc(ctx context.Context, cwLogs awsLambdaEvents.CloudwatchLogsEvent) (interface{}, error) { logger, _ := ctx.</description>
   187      </item>
   188      
   189      <item>
   190        <title>DynamoDB</title>
   191        <link>/reference/archetypes/dynamodb/</link>
   192        <pubDate>Wed, 28 Nov 2018 20:03:46 +0000</pubDate>
   193        
   194        <guid>/reference/archetypes/dynamodb/</guid>
   195        <description>To create a DynamoDB reactor that subscribes via an EventSourceMapping, use the NewDynamoDBReactor constructor as in:
   196  import ( awsLambdaEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; spartaArchetype &amp;#34;github.com/mweagle/Sparta/archetype&amp;#34; ) // DynamoDB reactor function func reactorFunc(ctx context.Context, dynamoEvent awsLambdaEvents.DynamoDBEvent) (interface{}, error) { logger, _ := ctx.Value(sparta.ContextKeyRequestLogger).(*logrus.Entry) logger.WithFields(logrus.Fields{ &amp;#34;Event&amp;#34;: dynamoEvent, }).Info(&amp;#34;DynamoDB Event&amp;#34;) return &amp;#34;Hello World 👋. Welcome to AWS Lambda! 🙌🎉🍾&amp;#34;, nil } func main() { // ...  handler := spartaArchetype.DynamoDBReactorFunc(reactorFunc) lambdaFn, lambdaFnErr := spartaArchetype.NewDynamoDBReactor(handler, &amp;#34;DYNAMO_DB_ARN_OR_CLOUDFORMATION_REF_VALUE&amp;#34;, &amp;#34;TRIM_HORIZON&amp;#34;, 10, nil) } </description>
   197      </item>
   198      
   199      <item>
   200        <title>Kinesis</title>
   201        <link>/reference/archetypes/kinesis/</link>
   202        <pubDate>Wed, 28 Nov 2018 20:03:46 +0000</pubDate>
   203        
   204        <guid>/reference/archetypes/kinesis/</guid>
   205        <description>To create a Kinesis Stream reactor that subscribes via an EventSourceMapping, use the NewKinesisReactor constructor as in:
   206  import ( awsLambdaEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; spartaArchetype &amp;#34;github.com/mweagle/Sparta/archetype&amp;#34; ) // KinesisStream reactor function func reactorFunc(ctx context.Context, kinesisEvent awsLambdaEvents.KinesisEvent) (interface{}, error) { logger, _ := ctx.Value(sparta.ContextKeyRequestLogger).(*logrus.Entry) logger.WithFields(logrus.Fields{ &amp;#34;Event&amp;#34;: kinesisEvent, }).Info(&amp;#34;Kinesis Event&amp;#34;) return &amp;#34;Hello World 👋. Welcome to AWS Lambda! 🙌🎉🍾&amp;#34;, nil } func main() { // ...  handler := spartaArchetype.KinesisReactorFunc(reactorFunc) lambdaFn, lambdaFnErr := spartaArchetype.NewKinesisReactor(handler, &amp;#34;KINESIS_STREAM_ARN_OR_CLOUDFORMATION_REF_VALUE&amp;#34;, &amp;#34;TRIM_HORIZON&amp;#34;, 10, nil) } </description>
   207      </item>
   208      
   209      <item>
   210        <title>Kinesis Firehose</title>
   211        <link>/reference/archetypes/kinesis_firehose/</link>
   212        <pubDate>Wed, 28 Nov 2018 20:03:46 +0000</pubDate>
   213        
   214        <guid>/reference/archetypes/kinesis_firehose/</guid>
   215        <description>There are two ways to create a Firehose Transform reactor that transforms a KinesisFirehoseEventRecord with a Lambda function:
   216   NewKinesisFirehoseLambdaTransformer  Transform using a Lambda function   NewKinesisFirehoseTransformer  Transform using a go text/template declaration    NewKinesisFirehoseLambdaTransformer import ( awsEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; spartaArchetype &amp;#34;github.com/mweagle/Sparta/archetype&amp;#34; ) // KinesisStream reactor function func reactorFunc(ctx context.Context, record *awsEvents.KinesisFirehoseEventRecord) (*awsEvents.KinesisFirehoseResponseRecord, error) { logger, _ := ctx.Value(sparta.ContextKeyRequestLogger).(*logrus.Entry) logger.WithFields(logrus.Fields{ &amp;#34;Record&amp;#34;: record, }).Info(&amp;#34;Kinesis Firehose Event&amp;#34;) responseRecord = &amp;amp;awsEvents.</description>
   217      </item>
   218      
   219      <item>
   220        <title>REST Service</title>
   221        <link>/reference/archetypes/rest/</link>
   222        <pubDate>Wed, 28 Nov 2018 20:03:46 +0000</pubDate>
   223        
   224        <guid>/reference/archetypes/rest/</guid>
   225        <description>The rest package provides convenience functions to define a serverless REST style service.
   226  The package uses three concepts:
   227   Routes: URL paths that resolve to a single go struct Resources: go structs that optionally define HTTP method (GET, POST, etc.). ResourceDefinition: an interface that go structs must implement in order to support resource-based registration.  Routes Routes are similar many HTTP-routing libraries. They support path parameters.
   228  Resources Resources are the targets of Routes.</description>
   229      </item>
   230      
   231      <item>
   232        <title>S3</title>
   233        <link>/reference/archetypes/s3/</link>
   234        <pubDate>Wed, 28 Nov 2018 20:03:46 +0000</pubDate>
   235        
   236        <guid>/reference/archetypes/s3/</guid>
   237        <description>There are two different S3-based constructors depending on whether your lambda function should use an Object Key Name filter. The S3 subscriber is preconfigured to be notified of both s3:ObjectCreated:* and s3:ObjectRemoved:* events.
   238  Object Key Name Filtering Object key name filtering only invokes a lambda function when objects with the given prefix are created.
   239  To subscribe to object events created by objects with a given prefix, use the NewS3ScopedReactor constructor as in:</description>
   240      </item>
   241      
   242      <item>
   243        <title>SNS</title>
   244        <link>/reference/archetypes/sns/</link>
   245        <pubDate>Wed, 28 Nov 2018 20:03:46 +0000</pubDate>
   246        
   247        <guid>/reference/archetypes/sns/</guid>
   248        <description>To create a SNS reactor that subscribes via an subscription configuration, use the NewSNSReactor constructor as in:
   249  import ( awsLambdaEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; spartaArchetype &amp;#34;github.com/mweagle/Sparta/archetype&amp;#34; ) // DynamoDB reactor function func reactorFunc(ctx context.Context, snsEvent awsLambdaEvents.SNSEvent) (interface{}, error) { logger, _ := ctx.Value(sparta.ContextKeyRequestLogger).(*logrus.Entry) logger.WithFields(logrus.Fields{ &amp;#34;Event&amp;#34;: snsEvent, }).Info(&amp;#34;SNS Event&amp;#34;) return &amp;#34;Hello World 👋. Welcome to AWS Lambda! 🙌🎉🍾&amp;#34;, nil } func main() { // ...  handler := spartaArchetype.SNSReactorFunc(reactorFunc) lambdaFn, lambdaFnErr := spartaArchetype.NewDynamoDBReactor(handler, &amp;#34;SNS_ARN_OR_CLOUDFORMATION_REF_VALUE&amp;#34;, nil) } </description>
   250      </item>
   251      
   252      <item>
   253        <title>CloudFront Distribution</title>
   254        <link>/reference/decorators/cloudfront_distribution/</link>
   255        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   256        
   257        <guid>/reference/decorators/cloudfront_distribution/</guid>
   258        <description>The CloudFrontDistributionDecorator associates a CloudFront Distribution with your S3-backed website. It is implemented as a ServiceDecoratorHookHandler as a single service can only provision one CloudFront distribution.
   259  Sample usage:
   260  //////////////////////////////////////////////////////////////////////////////// // CloudFront settings const subdomain = &amp;#34;mySiteSubdomain&amp;#34; // The domain managed by Route53. const domainName = &amp;#34;myRoute53ManagedDomain.net&amp;#34; // The site will be available at // https://mySiteSubdomain.myRoute53ManagedDomain.net  // The S3 bucketname must match the subdomain.domain // name pattern to serve as a CloudFront Distribution target var bucketName = fmt.</description>
   261      </item>
   262      
   263      <item>
   264        <title>CloudWatch Alarms</title>
   265        <link>/reference/operations/cloudwatch_alarms/</link>
   266        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   267        
   268        <guid>/reference/operations/cloudwatch_alarms/</guid>
   269        <description>The CloudWatchErrorAlarmDecorator associates a CloudWatch alarm and destination with your Lambda function.
   270  Sample usage:
   271  lambdaFn, _ := sparta.NewAWSLambda(&amp;#34;Hello World&amp;#34;, helloWorld, sparta.IAMRoleDefinition{}) lambdaFn.Decorators = []sparta.TemplateDecoratorHandler{ spartaDecorators.CloudWatchErrorAlarmDecorator(1, 1, 1, gocf.String(&amp;#34;MY_SNS_ARN&amp;#34;)), } </description>
   272      </item>
   273      
   274      <item>
   275        <title>CloudWatch Dashboard</title>
   276        <link>/reference/operations/cloudwatch_dashboard/</link>
   277        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   278        
   279        <guid>/reference/operations/cloudwatch_dashboard/</guid>
   280        <description>The DashboardDecorator creates a CloudWatch Dashboard that produces a single CloudWatch Dashboard to summarize your stack&amp;rsquo;s behavior.
   281  Sample usage:
   282  func workflowHooks(connections *service.Connections, lambdaFunctions []*sparta.LambdaAWSInfo, websiteURL *gocf.StringExpr) *sparta.WorkflowHooks { // Setup the DashboardDecorator lambda hook  workflowHooks := &amp;amp;sparta.WorkflowHooks{ ServiceDecorators: []sparta.ServiceDecoratorHookHandler{ spartaDecorators.DashboardDecorator(lambdaFunctions, 60), serviceResourceDecorator(connections, websiteURL), }, } return workflowHooks } A sample dashboard for the SpartaGeekwire project is:
   283  Related to this, see the recently announced AWS Lambda Application Dashboard.</description>
   284      </item>
   285      
   286      <item>
   287        <title>CodeDeploy Service Update</title>
   288        <link>/reference/operations/codedeploy_service_update/</link>
   289        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   290        
   291        <guid>/reference/operations/codedeploy_service_update/</guid>
   292        <description> TODO: Document the CodeDeployServiceUpdateDecorator decorator. See also the Deployment Strategy page.
   293   </description>
   294      </item>
   295      
   296      <item>
   297        <title>Lambda Versioning Decorator</title>
   298        <link>/reference/decorators/lambda_versioning/</link>
   299        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   300        
   301        <guid>/reference/decorators/lambda_versioning/</guid>
   302        <description> TODO: LambdaVersioningDecorator
   303   </description>
   304      </item>
   305      
   306      <item>
   307        <title>Publishing Outputs</title>
   308        <link>/reference/decorators/publish_outputs/</link>
   309        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   310        
   311        <guid>/reference/decorators/publish_outputs/</guid>
   312        <description>CloudFormation stack outputs can be used to advertise information about a service.
   313  Sparta provides different publishing output decorators depending on the type of CloudFormation resource output:
   314   Ref: PublishRefOutputDecorator Fn::Att: PublishAttOutputDecorator  Publishing Resource Ref Values For example, to publish the dynamically lambda resource name for a given AWS Lambda function, use PublishRefOutputDecorator such as:
   315  lambdaFunctionName := &amp;#34;Hello World&amp;#34; lambdaFn, _ := sparta.NewAWSLambda(lambdaFunctionName, helloWorld, sparta.IAMRoleDefinition{}) lambdaFn.Decorators = append(lambdaFn.Decorators, spartaDecorators.PublishRefOutputDecorator(fmt.Sprintf(&amp;#34;%s FunctionName&amp;#34;, lambdaFunctionName), fmt.</description>
   316      </item>
   317      
   318      <item>
   319        <title>S3 Artifact Publisher</title>
   320        <link>/reference/decorators/s3_artifact_publisher/</link>
   321        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   322        
   323        <guid>/reference/decorators/s3_artifact_publisher/</guid>
   324        <description>The S3ArtifactPublisherDecorator enables a service to publish objects to S3 locations as part of the service lifecycle.
   325  This decorator is implemented as a ServiceDecoratorHookHandler which is supplied to MainEx. For example:
   326  hooks := &amp;amp;sparta.WorkflowHooks{} payloadData := map[string]interface{}{ &amp;#34;SomeValue&amp;#34;: gocf.Ref(&amp;#34;AWS::StackName&amp;#34;), } serviceHook := spartaDecorators.S3ArtifactPublisherDecorator(gocf.String(&amp;#34;MY-S3-BUCKETNAME&amp;#34;), gocf.Join(&amp;#34;&amp;#34;, gocf.String(&amp;#34;metadata/&amp;#34;), gocf.Ref(&amp;#34;AWS::StackName&amp;#34;), gocf.String(&amp;#34;.json&amp;#34;)), payloadData) hooks.ServiceDecorators = []sparta.ServiceDecoratorHookHandler{serviceHook} </description>
   327      </item>
   328      
   329      <item>
   330        <title>Overview</title>
   331        <link>/example_service/step1/</link>
   332        <pubDate>Tue, 03 Oct 2017 07:15:40 +0000</pubDate>
   333        
   334        <guid>/example_service/step1/</guid>
   335        <description>Sparta is a framework for developing and deploying go based AWS Lambda-backed microservices. To help understand what that means we&amp;rsquo;ll begin with a &amp;ldquo;Hello World&amp;rdquo; lambda function and eventually deploy that to AWS. Note that we&amp;rsquo;re not going to handle all error cases to keep the example code to a minimum.
   336  Please be aware that running Lambda functions may incur costs. Be sure to decommission Sparta stacks after you are finished using them (via the delete command line option) to avoid unwanted charges.</description>
   337      </item>
   338      
   339      <item>
   340        <title>CI/CD</title>
   341        <link>/reference/operations/cicd/</link>
   342        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   343        
   344        <guid>/reference/operations/cicd/</guid>
   345        <description> TODO: Document the SpartaCodePipeline example. Also see the Medium Post
   346   </description>
   347      </item>
   348      
   349      <item>
   350        <title>CloudFormation</title>
   351        <link>/reference/eventsources/cloudformation/</link>
   352        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   353        
   354        <guid>/reference/eventsources/cloudformation/</guid>
   355        <description> TODO: CloudFormation source documentation
   356   </description>
   357      </item>
   358      
   359      <item>
   360        <title>CloudWatch Events</title>
   361        <link>/reference/eventsources/cloudwatchevents/</link>
   362        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   363        
   364        <guid>/reference/eventsources/cloudwatchevents/</guid>
   365        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to different types of CloudWatch Events. This overview is based on the SpartaApplication sample code if you&amp;rsquo;d rather jump to the end result.
   366  Goal Assume that we&amp;rsquo;re supposed to write a simple &amp;ldquo;HelloWorld&amp;rdquo; CloudWatch event function that has two requirements:
   367   Run every 5 minutes to provide a heartbeat notification to our alerting system via a logfile entry Log EC2-related events for later processing  Getting Started The lambda function is relatively small:</description>
   368      </item>
   369      
   370      <item>
   371        <title>CloudWatch Logs</title>
   372        <link>/reference/eventsources/cloudwatchlogs/</link>
   373        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   374        
   375        <guid>/reference/eventsources/cloudwatchlogs/</guid>
   376        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to CloudWatch Logs. This overview is based on the SpartaApplication sample code if you&amp;rsquo;d rather jump to the end result.
   377  Goal Assume that we&amp;rsquo;re supposed to write a simple &amp;ldquo;HelloWorld&amp;rdquo; CloudWatch Logs function that should be triggered in response to any log message issued to a specific Log Group.
   378  Getting Started Our lambda function is relatively short:</description>
   379      </item>
   380      
   381      <item>
   382        <title>Cognito</title>
   383        <link>/reference/eventsources/cognito/</link>
   384        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   385        
   386        <guid>/reference/eventsources/cognito/</guid>
   387        <description> TODO: Cognito source documentation
   388   </description>
   389      </item>
   390      
   391      <item>
   392        <title>Custom Commands</title>
   393        <link>/reference/application/custom_commands/</link>
   394        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   395        
   396        <guid>/reference/application/custom_commands/</guid>
   397        <description>In addition to custom flags, an application may register completely new commands. For example, to support alternative topologies or integrated automated acceptance tests as part of a CI/CD pipeline.
   398  To register a custom command, define a new cobra.Command and add it to the sparta.CommandLineOptions.Root command value. Ensure you use the xxxxE Cobra functions so that errors can be properly propagated.
   399  httpServerCommand := &amp;amp;cobra.Command{ Use: &amp;#34;httpServer&amp;#34;, Short: &amp;#34;Sample HelloWorld HTTP server&amp;#34;, Long: `Sample HelloWorld HTTP server that binds to port: ` + HTTPServerPort, RunE: func(cmd *cobra.</description>
   400      </item>
   401      
   402      <item>
   403        <title>Custom Flags</title>
   404        <link>/reference/application/custom_flags/</link>
   405        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   406        
   407        <guid>/reference/application/custom_flags/</guid>
   408        <description>Some commands (eg: provision) may require additional options. For instance, your application&amp;rsquo;s provision logic may require VPC subnets or EC2 SSH Key Names.
   409  The default Sparta command line option flags may be extended and validated by building on the exposed Cobra command objects.
   410  Adding Flags To add a flag, use one of the pflag functions to register your custom flag with one of the standard CommandLineOption values.
   411  For example:
   412  // SSHKeyName is the SSH KeyName to use when provisioning new EC2 instance var SSHKeyName string func main() { // And add the SSHKeyName option to the provision step  sparta.</description>
   413      </item>
   414      
   415      <item>
   416        <title>DynamoDB</title>
   417        <link>/reference/eventsources/dynamodb/</link>
   418        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   419        
   420        <guid>/reference/eventsources/dynamodb/</guid>
   421        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to DynamoDB stream events. This overview is based on the SpartaApplication sample code if you&amp;rsquo;d rather jump to the end result.
   422  Goal Assume that we&amp;rsquo;re given a DynamoDB stream. See below for details on how to create the stream. We&amp;rsquo;ve been asked to write a lambda function that logs when operations are performed to the table so that we can perform offline analysis.</description>
   423      </item>
   424      
   425      <item>
   426        <title>Echo</title>
   427        <link>/reference/apigateway/echo_event/</link>
   428        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   429        
   430        <guid>/reference/apigateway/echo_event/</guid>
   431        <description>To start, we&amp;rsquo;ll create a HTTPS accessible lambda function that simply echoes back the contents of incoming API Gateway Lambda event. The source for this is the SpartaHTML.
   432  For reference, the helloWorld function is below.
   433  import ( awsLambdaEvents &amp;#34;github.com/aws/aws-lambda-go/events&amp;#34; spartaAPIGateway &amp;#34;github.com/mweagle/Sparta/aws/apigateway&amp;#34; ) func helloWorld(ctx context.Context, gatewayEvent spartaAWSEvents.APIGatewayRequest) (*spartaAPIGateway.Response, error) { logger, loggerOk := ctx.Value(sparta.ContextKeyLogger).(*logrus.Logger) if loggerOk { logger.Info(&amp;#34;Hello world structured log message&amp;#34;) } // Return a message, together with the incoming input.</description>
   434      </item>
   435      
   436      <item>
   437        <title>Kinesis</title>
   438        <link>/reference/eventsources/kinesis/</link>
   439        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   440        
   441        <guid>/reference/eventsources/kinesis/</guid>
   442        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to Amazon Kinesis streams. This overview is based on the SpartaApplication sample code if you&amp;rsquo;d rather jump to the end result.
   443  Goal The goal of this example is to provision a Sparta lambda function that logs Amazon Kinesis events to CloudWatch logs.
   444  Getting Started We&amp;rsquo;ll start with an empty lambda function and build up the needed functionality.</description>
   445      </item>
   446      
   447      <item>
   448        <title>Managing Environments</title>
   449        <link>/reference/application/environments/</link>
   450        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   451        
   452        <guid>/reference/application/environments/</guid>
   453        <description>It&amp;rsquo;s common for a single Sparta application to target multiple environments. For example:
   454   Development Staging Production  Each environment is largely similar, but the application may need slightly different configuration in each context.
   455  To support this, Sparta uses Go&amp;rsquo;s conditional compilation support to ensure that configuration information is validated at build time. Conditional compilation is supported via the --tags/-t command line argument.
   456  This example will work through the SpartaConfig sample.</description>
   457      </item>
   458      
   459      <item>
   460        <title>S3</title>
   461        <link>/reference/eventsources/s3/</link>
   462        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   463        
   464        <guid>/reference/eventsources/s3/</guid>
   465        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to S3 events. This overview is based on the SpartaImager sample code if you&amp;rsquo;d rather jump to the end result.
   466  Goal Assume we have an S3 bucket that stores images. You&amp;rsquo;ve been asked to write a service that creates a duplicate image that includes a characteristic stamp overlay and store it in the same S3 bucket.
   467  Getting Started We&amp;rsquo;ll start with an empty lambda function and build up the needed functionality.</description>
   468      </item>
   469      
   470      <item>
   471        <title>SES</title>
   472        <link>/reference/eventsources/ses/</link>
   473        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   474        
   475        <guid>/reference/eventsources/ses/</guid>
   476        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to inbound email. This overview is based on the SpartaApplication sample code if you&amp;rsquo;d rather jump to the end result.
   477  Goal Assume that we have already verified our email domain with AWS. This allows our domain&amp;rsquo;s email to be handled by SES.
   478  We&amp;rsquo;ve been asked to write a lambda function that logs inbound messages, including the metadata associated with the message body itself.</description>
   479      </item>
   480      
   481      <item>
   482        <title>SNS</title>
   483        <link>/reference/eventsources/sns/</link>
   484        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   485        
   486        <guid>/reference/eventsources/sns/</guid>
   487        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to SNS events. This overview is based on the SpartaApplication sample code if you&amp;rsquo;d rather jump to the end result.
   488  Goal Assume that we have an SNS topic that broadcasts notifications. We&amp;rsquo;ve been asked to write a lambda function that logs the Subject and Message text to CloudWatch logs for later processing.
   489  Getting Started We&amp;rsquo;ll start with an empty lambda function and build up the needed functionality.</description>
   490      </item>
   491      
   492      <item>
   493        <title>SQS</title>
   494        <link>/reference/eventsources/sqs/</link>
   495        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   496        
   497        <guid>/reference/eventsources/sqs/</guid>
   498        <description>In this section we&amp;rsquo;ll walkthrough how to trigger your lambda function in response to AWS Simple Queue Service (SQS) events. This overview is based on the SpartaSQS sample code if you&amp;rsquo;d rather jump to the end result.
   499  Goal The goal here is to create a self-contained service that provisions a SQS queue, an AWS Lambda function that processes messages posted to the queue
   500  Getting Started We&amp;rsquo;ll start with an empty lambda function and build up the needed functionality.</description>
   501      </item>
   502      
   503      <item>
   504        <title>Request Parameters</title>
   505        <link>/reference/apigateway/request_params/</link>
   506        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   507        
   508        <guid>/reference/apigateway/request_params/</guid>
   509        <description>Request Parameters This example demonstrates how to accept client request params supplied as HTTP query params and return an expiring S3 URL to access content. The source for this is the s3ItemInfo function defined as part of the SpartaApplication.
   510  Lambda Definition Our function will accept two params:
   511   bucketName : The S3 bucket name storing the asset keyName : The S3 item key  Those params will be passed as part of the URL query string.</description>
   512      </item>
   513      
   514      <item>
   515        <title>Request Context</title>
   516        <link>/reference/apigateway/context/</link>
   517        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   518        
   519        <guid>/reference/apigateway/context/</guid>
   520        <description>This example demonstrates how to use the Context struct provided as part of the APIGatewayRequest. The SpartaGeoIP service will return Geo information based on the inbound request&amp;rsquo;s IP address.
   521  Lambda Definition Our function will examine the inbound request, lookup the user&amp;rsquo;s IP address in the GeoLite2 Database and return any information to the client.
   522  As this function is only expected to be invoked from the API Gateway, we&amp;rsquo;ll unmarshall the inbound event:</description>
   523      </item>
   524      
   525      <item>
   526        <title>Fargate</title>
   527        <link>/reference/step/fargate/</link>
   528        <pubDate>Sun, 16 Dec 2018 07:02:28 +0000</pubDate>
   529        
   530        <guid>/reference/step/fargate/</guid>
   531        <description>Teaching people to do serverless is hard. It&amp;#39;s far less about teaching someone about FaaS and far more about getting people into the right mindset. It is not about technology, or at least, it&amp;#39;s not about doing technology
   532  &amp;mdash; Paul Johnston - knows some stuff about stuff (@PaulDJohnston) December 13, 2018  While Serverless and FaaS are often used interchangeably, there are types of workloads that are more challenging to move to FaaS.</description>
   533      </item>
   534      
   535      <item>
   536        <title>CORS</title>
   537        <link>/reference/apigateway/cors/</link>
   538        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   539        
   540        <guid>/reference/apigateway/cors/</guid>
   541        <description>Cross Origin Resource Sharing defines a protocol by which resources on different domains may establish whether cross site operations are permissible.
   542  Sparta makes CORS support a single CORSEnabled field of the API struct:
   543  // Register the function with the API Gateway apiStage := sparta.NewStage(&amp;#34;v1&amp;#34;) apiGateway := sparta.NewAPIGateway(&amp;#34;SpartaHTML&amp;#34;, apiStage) // Enable CORS s.t. the S3 site can access the resources apiGateway.CORSEnabled = true Setting the boolean to true will add the necessary OPTIONS and mock responses to all resources exposed by your API.</description>
   544      </item>
   545      
   546      <item>
   547        <title>Deployment Strategies</title>
   548        <link>/reference/operations/deployment_strategies/</link>
   549        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   550        
   551        <guid>/reference/operations/deployment_strategies/</guid>
   552        <description> Document the SpartaSafeDeploy example.
   553   </description>
   554      </item>
   555      
   556      <item>
   557        <title>Details</title>
   558        <link>/example_service/step2/</link>
   559        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   560        
   561        <guid>/example_service/step2/</guid>
   562        <description>The Overview walked through a simple &amp;ldquo;Hello World&amp;rdquo; example. In this section we&amp;rsquo;ll cover how Sparta works in preparation for moving on to more advanced use. Most development will use the provision command line argument, so this section will outline exactly what that entails.
   563  Provisioning Flow The provisioning workflow is defined in provision.go, with a goal of marshalling all AWS operations into a CloudFormation template. Where CloudFormation does not support a given service, Sparta falls back to using Lambda-backed Custom Resources in the template definition.</description>
   564      </item>
   565      
   566      <item>
   567        <title>Slack SlashCommand</title>
   568        <link>/reference/apigateway/slack/</link>
   569        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   570        
   571        <guid>/reference/apigateway/slack/</guid>
   572        <description>In this example, we&amp;rsquo;ll walk through creating a Slack Slash Command service. The source for this is the SpartaSlackbot repo.
   573  Our initial command handler won&amp;rsquo;t be very sophisticated, but will show the steps necessary to provision and configure a Sparta AWS Gateway-enabled Lambda function.
   574  Define the Lambda Function This lambda handler is a bit more complicated than the other examples, primarily because of the Slack Integration requirements. The full source is:</description>
   575      </item>
   576      
   577      <item>
   578        <title>Metrics Publisher</title>
   579        <link>/reference/operations/metrics_publisher/</link>
   580        <pubDate>Sat, 01 Dec 2018 06:02:32 +0000</pubDate>
   581        
   582        <guid>/reference/operations/metrics_publisher/</guid>
   583        <description>AWS Lambda is tightly integrated with other AWS services and provides excellent opportunities for improving your service&amp;rsquo;s observability posture. Sparta includes a CloudWatch Metrics publisher that periodically publishes metrics to CloudWatch.
   584  This periodic task publishes environment-level metrics that have been detected by the gopsutil package. Metrics include:
   585   CPU  Percent used   Disk  Percent used   Host  Uptime (milliseconds)   Load  Load1 (no units) Load5 (no units) Load15 (no units)   Network  NetBytesSent (bytes) NetBytesRecv (bytes) NetErrin (count) NetErrout (count)    You can provide an optional map[string]string set of dimensions to which the metrics should be published.</description>
   586      </item>
   587      
   588      <item>
   589        <title>Profiling</title>
   590        <link>/reference/operations/profiling/</link>
   591        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   592        
   593        <guid>/reference/operations/profiling/</guid>
   594        <description>One of Lambda&amp;rsquo;s biggest strengths, its ability to automatically scale across ephemeral containers in response to increased load, also creates one of its biggest problems: observability. The traditional set of tools used to identify performance bottlenecks are no longer valid, as there is no host into which one can SSH and interactively interrogate. Identifying performance bottlenecks is even more significant due to the Lambda pricing model, where idle time often directly translates into increased costs.</description>
   595      </item>
   596      
   597      <item>
   598        <title>CloudFormation Resources</title>
   599        <link>/reference/application/custom_lambda_resources/</link>
   600        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   601        
   602        <guid>/reference/application/custom_lambda_resources/</guid>
   603        <description>In addition to per-lambda custom resources, a service may benefit from the ability to include a service-scoped Lambda backed CustomResource.
   604  Including a custom service scoped resource is a multi-step process. The code excerpts below are from the SpartaCustomResource sample application.
   605  1. Resource Type The first step is to define a custom CloudFormation Resource Type
   606  //////////////////////////////////////////////////////////////////////////////// // 1 - Define the custom type const spartaHelloWorldResourceType = &amp;#34;Custom::sparta::HelloWorldResource&amp;#34; 2. Request Parameters The next step is to define the parameters that are supplied to the custom resource invocation.</description>
   607      </item>
   608      
   609      <item>
   610        <title>Custom Resources</title>
   611        <link>/reference/application/custom_resources/</link>
   612        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   613        
   614        <guid>/reference/application/custom_resources/</guid>
   615        <description>In some circumstances your service may need to provision or access resources that fall outside the standard workflow. In this case you can use CloudFormation Lambda-backed CustomResources to create or access resources during your CloudFormation stack&amp;rsquo;s lifecycle.
   616  Sparta provides unchecked access to the CloudFormation resource lifecycle via the RequireCustomResource function. This function registers an AWS Lambda Function as an CloudFormation custom resource lifecycle.
   617  In this section we&amp;rsquo;ll walk through a sample user-defined custom resource and discuss how a custom resource&amp;rsquo;s outputs can be propagated to an application-level Sparta lambda function.</description>
   618      </item>
   619      
   620      <item>
   621        <title>Discovery Service</title>
   622        <link>/reference/discovery/</link>
   623        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   624        
   625        <guid>/reference/discovery/</guid>
   626        <description>The ability to provision dynamic infrastructure (see also the SES Event Source Example) as part of a Sparta application creates a need to discover those resources at lambda execution time.
   627  Sparta exposes this functionality via sparta.Discover. This function returns information about the current stack (eg, name, region, ID) as well as metadata about the immediate dependencies of the calling go lambda function.
   628  The following sections walk through provisioning a S3 bucket, declaring an explicit dependency on that resource, and then discovering the resource at lambda execution time.</description>
   629      </item>
   630      
   631      <item>
   632        <title>Docker</title>
   633        <link>/reference/docker/</link>
   634        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   635        
   636        <guid>/reference/docker/</guid>
   637        <description>TODO
   638   Docker Support Document the SpartaDocker project.</description>
   639      </item>
   640      
   641      <item>
   642        <title>Hybrid Topologies</title>
   643        <link>/reference/hybrid_topologies/</link>
   644        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   645        
   646        <guid>/reference/hybrid_topologies/</guid>
   647        <description>At a broad level, AWS Lambda represents a new level of compute abstraction for services. Developers don&amp;rsquo;t immediately concern themselves with HA topologies, configuration management, capacity planning, or many of the other areas traditionally handled by operations. These are handled by the vendor supplied execution environment.
   648  However, Lambda is a relatively new technology and is not ideally suited to certain types of tasks. For example, given the current Lambda limits, the following task types might better be handled by &amp;ldquo;legacy&amp;rdquo; AWS services:</description>
   649      </item>
   650      
   651      <item>
   652        <title>S3 Sites with CORS</title>
   653        <link>/reference/apigateway/s3site/</link>
   654        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   655        
   656        <guid>/reference/apigateway/s3site/</guid>
   657        <description>Sparta supports provisioning an S3-backed static website as part of provisioning. We&amp;rsquo;ll walk through provisioning a minimal Bootstrap website that accesses API Gateway lambda functions provisioned by a single service in this example.
   658  The source for this is the SpartaHTML example application.
   659  Lambda Definition We&amp;rsquo;ll start by creating a very simple lambda function:
   660  import ( spartaAPIGateway &amp;#34;github.com/mweagle/Sparta/aws/apigateway&amp;#34; spartaAWSEvents &amp;#34;github.com/mweagle/Sparta/aws/events&amp;#34; ) type helloWorldResponse struct { Message string Request spartaAWSEvents.APIGatewayRequest } //////////////////////////////////////////////////////////////////////////////// // Hello world event handler func helloWorld(ctx context.</description>
   661      </item>
   662      
   663      <item>
   664        <title>Dynamic Infrastructure</title>
   665        <link>/reference/decorators/dynamic_infrastructure/</link>
   666        <pubDate>Sat, 01 Dec 2018 06:28:42 +0000</pubDate>
   667        
   668        <guid>/reference/decorators/dynamic_infrastructure/</guid>
   669        <description>In addition to provisioning AWS Lambda functions, Sparta supports the creation of other CloudFormation Resources. This enables a service to move towards immutable infrastructure, where the service and its infrastructure requirements are treated as a logical unit.
   670  For instance, consider the case where two developers are working in the same AWS account.
   671   Developer 1 is working on analyzing text documents.  Their lambda code is triggered in response to uploading sample text documents to S3.</description>
   672      </item>
   673      
   674      <item>
   675        <title>Testing</title>
   676        <link>/reference/testing/</link>
   677        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   678        
   679        <guid>/reference/testing/</guid>
   680        <description>While developing Sparta lambda functions it may be useful to test them locally without needing to provision each new code change. You can test your lambda functions using standard go test functionality.
   681  To create proper event types, consider:
   682   AWS Lambda Go types Sparta types Use NewAPIGatewayMockRequest to generate API Gateway style requests.  </description>
   683      </item>
   684      
   685      <item>
   686        <title>Supporting Packages</title>
   687        <link>/reference/supporting_packages/</link>
   688        <pubDate>Mon, 22 Jan 2018 21:49:38 +0000</pubDate>
   689        
   690        <guid>/reference/supporting_packages/</guid>
   691        <description>The following packages are part of the Sparta ecosystem and can be used in combination or as standalone in other applications.
   692  go-cloudcondensor The go-cloudcondensor package provides utilities to express CloudFormation templates as a set of go functions. Templates are evaluated and the and the resulting JSON can be integrated into existing CLI-based workflows.
   693  go-cloudformation The go-cloudformation package provides a Go object model for the official CloudFormation JSON Schema.
   694  SpartaVault SpartaVault uses KMS to encrypt values into Go types that can be safely committed to source control.</description>
   695      </item>
   696      
   697      <item>
   698        <title>Limitations</title>
   699        <link>/reference/limitations/</link>
   700        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   701        
   702        <guid>/reference/limitations/</guid>
   703        <description>AWS Lambda Limitations  Lambda is not yet globally available. Please view the Global Infrastructure page for the latest deployment status. There are Lambda Limits that may affect your development It&amp;rsquo;s not possible to dynamically set HTTP response headers based on the Lambda response body:  https://forums.aws.amazon.com/thread.jspa?threadID=203889 https://forums.aws.amazon.com/thread.jspa?threadID=210826   Similarly, it&amp;rsquo;s not possible to set proper error response bodies.  </description>
   704      </item>
   705      
   706      <item>
   707        <title>FAQ</title>
   708        <link>/reference/faq/</link>
   709        <pubDate>Wed, 09 Mar 2016 19:56:50 +0100</pubDate>
   710        
   711        <guid>/reference/faq/</guid>
   712        <description>CloudFormation How do I create dynamic resource ARNs? Linking AWS resources together often requires creating dynamic ARN references. This can be achieved by using cloudformation.Join expressions.
   713  For instance:
   714  import ( gocf &amp;#34;github.com/mweagle/go-cloudformation&amp;#34; ) s3SiteBucketAllKeysResourceValue := gocf.Join(&amp;#34;&amp;#34;, gocf.String(&amp;#34;arn:aws:s3:::&amp;#34;), gocf.Ref(s3BucketResourceName), gocf.String(&amp;#34;/*&amp;#34;)) import ( gocf &amp;#34;github.com/mweagle/go-cloudformation&amp;#34; ) AuthorizerURI: gocf.Join(&amp;#34;&amp;#34;, gocf.String(&amp;#34;arn:aws:apigateway:&amp;#34;), gocf.Ref(&amp;#34;AWS::Region&amp;#34;).String(), gocf.String(&amp;#34;:lambda:path/2015-03-31/functions/&amp;#34;), gocf.GetAtt(myAWSLambdaInfo.LogicalResourceName(), &amp;#34;Arn&amp;#34;), gocf.String(&amp;#34;/invocations&amp;#34;)), See the CloudFormation Fn::GetAtt docs for the set of attributes created by each resource. CloudFormation pseudo-parameters can be included in dynamic expresssions via gocf.</description>
   715      </item>
   716      
   717      <item>
   718        <title></title>
   719        <link>/_footer/</link>
   720        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
   721        
   722        <guid>/_footer/</guid>
   723        <description></description>
   724      </item>
   725      
   726      <item>
   727        <title></title>
   728        <link>/_header/</link>
   729        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
   730        
   731        <guid>/_header/</guid>
   732        <description></description>
   733      </item>
   734      
   735    </channel>
   736  </rss>