Package: sceptre
SceptreAboutSceptre is a tool to driveAWS CloudFormation. It automates the
mundane, repetitive and error-prone tasks, enabling you to concentrate on
building better infrastructure.FeaturesCode reuse by separating a Stack's template and its configurationSupport for templates written in JSON, YAML, Jinja2 or Python DSLs such as
TroposphereDependency resolution by passing of Stack outputs to parameters of dependent
StacksStack Group support by bundling related Stacks into logical groups (e.g. dev
and prod)Stack Group-level commands, such as creating multiple Stacks with a single
commandFast, highly parallelised buildsBuilt in support for working with Stacks in multiple AWS accounts and regionsInfrastructure visibility with meta-operations such as Stack querying
protectionSupport for inserting dynamic values in templates via customisable ResolversSupport for running arbitrary code as Hooks before/after Stack buildsBenefitsUtilises cloud-native Infrastructure as Code engines (CloudFormation)You do not need to manage stateSimple templates using popular templating syntax - Yaml & JinjaPowerful flexibility using a mature programming language - PythonEasy to integrate as part of a CI/CD pipeline by using HooksSimple CLI and APIUnopinionated - Sceptre does not force a specific project structureInstallUsing pip$ pip install sceptreMore information on installing sceptre can be found in ourInstallation GuideUsing Docker ImageView ourDocker repository.
Images available from version 2.0.0 onward.To use our Docker image follow these instructions:Pull the imagedocker pull sceptreorg/sceptre:[SCEPTRE_VERSION_NUMBER]e.g.docker pull sceptreorg/sceptre:2.5.0. Leave out the version number if you
wish to runlatestor rundocker pull sceptreorg/sceptre:latest.Run the image. You will need to mount the working directory where your
project resides to a directory calledproject. You will also need to mount
a volume with your AWS config to your docker container. E.g.docker run -v $(pwd):/project -v /Users/me/.aws/:/root/.aws/:ro sceptreorg/sceptre:latest --helpIf you want to use a custom ENTRYPOINT simply amend the Docker command:docker run -ti --entrypoint='' sceptreorg/sceptre:latest shThe above command will enter you into the shell of the Docker container where
you can execute sceptre commands - useful for development.If you have any other environment variables in your non-docker shell you will
need to pass these in on the Docker CLI using the-eflag. See Docker
documentation on how to achieve this.ExampleSceptre organises Stacks into "Stack Groups". Each Stack is represented by a
YAML configuration file stored in a directory which represents the Stack Group.
Here, we have two Stacks,vpcandsubnets, in a Stack Group nameddev:$tree
.
├──config
│└──dev
│├──config.yaml
│├──subnets.yaml
│└──vpc.yaml
└──templates├──subnets.py└──vpc.pyWe can create a Stack with thecreatecommand. ThisvpcStack contains a
VPC.$sceptrecreatedev/vpc.yaml

dev/vpc-Creatingstackdev/vpc
VirtualPrivateCloudAWS::EC2::VPCCREATE_IN_PROGRESS
dev/vpcVirtualPrivateCloudAWS::EC2::VPCCREATE_COMPLETE
dev/vpcsceptre-demo-dev-vpcAWS::CloudFormation::StackCREATE_COMPLETEThesubnetsStack contains a subnet which must be created in the VPC. To do
this, we need to pass the VPC ID, which is exposed as a Stack output of thevpcStack, to a parameter of thesubnetsStack. Sceptre automatically
resolves this dependency for us.$sceptrecreatedev/subnets.yaml
dev/subnets-Creatingstack
dev/subnetsSubnetAWS::EC2::SubnetCREATE_IN_PROGRESS
dev/subnetsSubnetAWS::EC2::SubnetCREATE_COMPLETE
dev/subnetssceptre-demo-dev-subnetsAWS::CloudFormation::StackCREATE_COMPLETESceptre implements meta-operations, which allow us to find out information about
our Stacks:$sceptrelistresourcesdev/subnets.yaml

-LogicalResourceId:SubnetPhysicalResourceId:subnet-445e6e32dev/vpc:
-LogicalResourceId:VirtualPrivateCloudPhysicalResourceId:vpc-c4715da0Sceptre provides Stack Group level commands. This one deletes the wholedevStack Group. The subnet exists within the vpc, so it must be deleted first.
Sceptre handles this automatically:$sceptredeletedev

Deletingstack
dev/subnetsSubnetAWS::EC2::SubnetDELETE_IN_PROGRESS
dev/subnets-Stackdeleted
dev/vpcDeletingstack
dev/vpcVirtualPrivateCloudAWS::EC2::VPCDELETE_IN_PROGRESS
dev/vpc-StackdeletedNote: Deleting Stacks willonlydelete a given Stack, or the Stacks that are
directly in a given StackGroup. By default Stack dependencies that are
external to the StackGroup are not deleted.Sceptre can also handle cross Stack Group dependencies, take the following
example project:$tree
.
├──config
│├──dev
││├──network
│││└──vpc.yaml
││├──users
│││└──iam.yaml
││├──compute
│││└──ec2.yaml
││└──config.yaml
│└──staging
│└──eu
│├──config.yaml
│└──stack.yaml
├──hooks
│└──stack.py
├──templates
│├──network.json
│├──iam.json
│├──ec2.json
│└──stack.json
└──vars├──dev.yaml└──staging.yamlIn this projectstaging/eu/stack.yamlhas a dependency on the output ofdev/users/iam.yaml. If you wanted to create the Stackstaging/eu/stack.yaml,
Sceptre will resolve all of it's dependencies, includingdev/users/iam.yaml,
before attempting to create the Stack.UsageSceptre can be used from the CLI, or imported as a Python package.CLIUsage: sceptre [OPTIONS] COMMAND [ARGS]...

  Sceptre is a tool to manage your cloud native infrastructure deployments.

Options:
  --version                  Show the version and exit.
  --debug                    Turn on debug logging.
  --dir TEXT                 Specify sceptre directory.
  --output [text|yaml|json]  The formatting style for command output.
  --no-colour                Turn off output colouring.
  --var TEXT                 A variable to replace the value of an item in
                             config file.
  --var-file FILENAME        A YAML file of variables to replace the values
                             of items in config files.
  --ignore-dependencies      Ignore dependencies when executing command.
  --merge-vars               Merge variables from successive --vars and var
                             files.
  --help                     Show this message and exit.

Commands:
  create         Creates a stack or a change set.
  delete         Deletes a stack or a change set.
  describe       Commands for describing attributes of stacks.
  estimate-cost  Estimates the cost of the template.
  execute        Executes a Change Set.
  generate       Prints the template.
  launch         Launch a Stack or StackGroup.
  list           Commands for listing attributes of stacks.
  new            Commands for initialising Sceptre projects.
  set-policy     Sets Stack policy.
  status         Print status of stack or stack_group.
  update         Update a stack.
  validate       Validates the template.PythonUsing Sceptre as a Python module is very straightforward. You need to create a
SceptreContext, which tells Sceptre where your project path is and which path
you want to execute on, we call this the "command path".After you have created a SceptreContext you need to pass this into a
SceptrePlan. On instantiation the SceptrePlan will handle all the required steps
to make sure the action you wish to take on the command path are resolved.After you have instantiated a SceptrePlan you can access all the actions you can
take on a Stack, such asvalidate(),launch(),list()anddelete().fromsceptre.contextimportSceptreContextfromsceptre.plan.planimportSceptrePlancontext=SceptreContext("/path/to/project","command_path")plan=SceptrePlan(context)plan.launch()Full API reference documentation can be found in theDocumentationTutorial and DocumentationGet StartedDocumentationCommunicationSceptre community discussions happen in the #sceptre chanel in theog-aws Slack.  To join click
onhttp://slackhatesthe.cloud/to create an account and join the
#sceptre channel.ContributingSee ourContributing GuideSponsors