Global Options

--[no-]interactive-logger

Default: Enabled

Use this option to disable the animated logger. The logger is also disabed automatically in environments where STDIN is not a tty, such as Jenkins.

--[no-]show-all-events

Default: Disabled

By default, Moonshot show only error CloudFormation events during the create, update, and delete actions. With this enabled, all events are displayed to the screen. This can be quite noisy, but also helpful if you want to see where your stack updates are taking the most time, for example.

--[no-]verbose / -v

Default: Disabled

Display debug logging. The types of things logged here are mostly useful only for core Moonshot developers, or if you are working on custom plugins.

--environment=NAME / -n NAME

Default: dev-$USER, or as specified in the environment_name configuration option in Moonfile.rb.

Set the application's environment, such as jsmith1 or production. This is used to configure the CloudFormation Stack name. Not all commands make use of this option.

Core Commands

moonshot new

Creates a new Moonshot application with the necessary directory structure and sample files.

Example:

moonshot new my_application

moonshot list

List stacks for this application. At this time, there are no additional options for this command. All stacks in the current region are displayed.

Example Output

┌─ Environment List
│
│ dev-johnsmith  2016-08-03 13:38:43 UTC UPDATE_COMPLETE
│ dev-johnsmith2 2016-10-19 21:00:47 UTC ROLLBACK_COMPLETE
│ dev-johnsmith3 2016-10-19 22:34:35 UTC UPDATE_COMPLETE
│ dev-johnsmith4 2016-10-22 13:10:36 UTC ROLLBACK_COMPLETE
│ peter1         2016-10-10 00:01:29 UTC UPDATE_COMPLETE
│ peter2         2016-10-14 01:56:33 UTC UPDATE_COMPLETE
│
└──

moonshot create

Create a new environment. The user is prompted for any missing parameters, or for any parameters not set by parent stacks, answer files or on the command line that they may want to change the default value of.

Options

--parent=STACK_NAME / -p STACK_NAME

Default: parents_stacks configuration option in Moonfile.rb, which defaults to no parent stacks.

If set, this CloudFormation Stack will be used as a source of Stack Parameters, where each Output is mapped to an input Parameter on this CloudFormation Stack. As with all command-line options this will overwrite any configuration in Moonfile.rb.

--[no-]interactive

Default: Interactive prompting enabled.

If --no-interactive is specified, the user will not be prompted for any unspecified stack parameters. If any stack parameters are missing, an error message will be displayed at Moonshot will exit with status code 1. This is a useful option for continuous integration environments.

--answer-file=FILE / -a FILE

Default: No answer file is used.

This can be used to reference a YAML file containing values which should be used for stack parameters. This overrides default values, but has a lower precedent than the -P option (below). This is a useful option for automated environments, such as end-to-end test suites.

--parameter=KEY=VALUE / -P KEY=VALUE

Default: None.

Note: May be specified multiple times.

This can be used to set stack parameters on the command line. They have a higher priority than parameters found in the answer file specified with the --answer-file option.

--[no-]deploy / -d

Default: Run deployment immediately after stack creation.

If disabled, no deployment will be run after stack creation. Note that depending on your stack configuration, this may trigger, for example, ELB failures which will result in instance replacements.

Example Output

[ ✓ ] [ 0m 1s ] Created CloudFormation Stack my-service-jsmith1.
[ ✓ ] [ 4m 49s ] CloudFormation Stack my-service-jsmith1 successfully created.
[ ✓ ] [ 0m 0s ] Created CodeDeploy Application my-service-jsmith1.
[ ✓ ] [ 0m 1s ] Created CodeDeploy Deployment Group my-service-jsmith1.
[ ✓ ] [ 0m 1s ] AutoScaling Group up to capacity!
[ ✓ ] [ 0m 0s ] Build script bin/build.sh exited successfully!
[ ✓ ] [ 0m 1s ] Uploaded s3://my-service-builds/my-service-jsmith1-1457657945.tar.gz successfully.
[ ✓ ] [ 0m 49s ] Deployment d-UNF7JW2KE completed successfully!

moonshot update

Update an environment with the latest local CloudFormation template, and any Parameter updates specified via --answer-file or --parameter. If there are new parameters in the template and they are not specified, the user will be prompted for their values, unless --no-interactive is specified, in which case an error will be displayed.

Options

--answer-file=FILE / -a FILE

See [create][#moonshot-create].

--parent=STACK_NAME / -p STACK_NAME

See [create][#moonshot-create].

--parameter=KEY=VALUE / -P KEY=VALUE

See [create][#moonshot-create].

--[no-]show-all-events

See [create][#moonshot-create].

Examples

Update a single Stack parameter, using the latest template:

moonshot update -n env-name -P NumInstances=4

Update multiple Stack parameters using a YAML-formatted answer file:

moonshot update -n prod --answer-file updates.yml

Example Output

Output:

[ ✓ ] [ 0m 1s ] Initiated update for CloudFormation Stack my-service-staging.
[ ✓ ] [ 6m 11s ] CloudFormation Stack my-service-staging successfully updated.
[ ✓ ] [ 0m 0s ] CodeDeploy Application my-service-staging already exists.
[ ✓ ] [ 0m 0s ] CodeDeploy CodeDeploy Deployment Group my-service-staging already exists.
[ ✓ ] [ 0m 1s ] AutoScaling Group up to capacity!

moonshot status

Example

moonshot status --name staging

Example Output

┌─ CodeDeploy Application: my-service-staging
│
│ Application and Deployment Group are configured correctly.
│
└──
CloudFormation Stack my-service-staging exists.
┌─ Stack Parameters
│
│ ArtifactBucket:    my-service-bucket
│ AvailabilityZone1: us-east-1a
│ AvailabilityZone2: us-east-1d
│ DesiredCapacity:   1
│
├─ Stack Outputs
│
│ URL: http://sample-LoadBala-VA232FB9FWFZ-1573168493.us-east-1.elb.amazonaws.com
│
├─ ASG: AutoScalingGroup
│
│ Name: my-service-staging-AutoScalingGroup-104IA9X5MF7GH
│ Using ELB health checks, with a 600s health check grace period.
│ Desired Capacity is 1 (Min: 1, Max: 5).
│ Has 1 Load Balancer(s): sample-LoadBala-VA232FB9FWFZ
│
├── Instances
│
│  i-5607c6cd 52.90.68.26 InService Healthy 0d 0h 8m 11s (launch config up to date)
│
├── Recent Activity
│
│  2016-03-11 01:07:59 UTC Terminating EC2 instance: i-73fe99f7     Successful 100%
│  2016-03-11 01:03:26 UTC Launching a new EC2 instance: i-5607c6cd Successful 100%
│  2016-03-11 00:58:03 UTC Launching a new EC2 instance: i-73fe99f7 Successful 100%
│
└──

moonshot push

Create a development build from the working directory, and deploy it.

Example

moonshot deploy-code --name my-service-staging

Example Output

[ ✓ ] [ 0m 1s ] Build script bin/build.sh exited successfully!
[ ✓ ] [ 0m 1s ] Uploaded s3://my-service-staging/my-service-staging-1457658789.tar.gz successfully.
[ ✓ ] [ 1m 28s ] Deployment d-PFMNSB5KE completed successfully!

moonshot build VERSION

Build a tarball of the software, ready for deployment. Requires a version name parameter.

Example

moonshot build 1.0.0

Example Output

[ ✓ ] [ 0m 0s ] Build script bin/build.sh exited successfully!
[ ✓ ] [ 0m 1s ] Uploaded s3://my-service-staging/1.0.0.tar.gz successfully.

moonshot deploy VERSION

Deploy a versioned release created with the build command. Requires a version name parameter.

Example

moonshot deploy 1.0.0

Example Output

[ ✓ ] [ 1m 0s ] Deployment d-M4FY304KE completed successfully!

moonshot delete

Delete an existing environment.

Example

moonshot delete --name staging

Example Output

[ ✓ ] [ 0m 1s ] Initiated deletion of CloudFormation Stack my-service-staging.
[ ✓ ] [ 11m 50s ] CloudFormation Stack my-service-staging successfully deleted.
[ ✓ ] [ 0m 0s ] Deleted CodeDeploy Application 'my-service-staging'.

moonshot doctor

Run configuration checks against current environment. Throws an error if one or more checks failed. For example, if you are using a deployment_mechanism that is using S3, it will check if the bucket actually exists and that you have access to. Each mechanism is able to add checks themselves that will be recognized and run.

Example Output

Stack
  ✓ CloudFormation template found at '/home/user/project/cloud_formation/my-service.json'.
  ✓ CloudFormation template is valid.

Script
  ✓ Script 'bin/build.sh' exists.

S3Bucket
  ✓ Bucket 'my-service-staging' exists.
  ✓ Bucket is writable, new builds can be uploaded.

CodeDeploy
  ✓ CodeDeployRole exists.
  ✓ Resource 'AutoScalingGroup' exists in the CloudFormation template.

moonshot ssh

SSH into the first or specified instance on the stack. If your environment has more than one Auto Scaling Group, the target Auto Scaling Group must be specified with the --auto-scaling-group option.

Options

--user USERNAME / -l USERNAME

Default: None, uses SSH commands default behavior.

Environment Variable: MOONSHOT_SSH_USER.

The user to authenticate to the remote host as.

--identity-file FILE / -i FILE

Default: None, uses SSH commands default behavior.

Environment Variable: MOONSHOT_SSH_KEY_FILE.

An SSH private key to use for authentication.

--instance INSTANCE_ID / -s INSTANCE_ID

Default: Use the first instance in the Auto Scaling Group.

If specified, the instance ID will be used instead of determining the first available instance automatically.

--command COMMAND / -c COMMAND

Default: Open an interactive SSH session.

If specified, run the command instead of opening an interactive SSH session.

--auto-scaling-group NAME / -g NAME

Default: Use only Auto Scaling Group, or fail if multiple Auto Scaling Groups are present in Stack.

This option is required if there is more than one Auto Scaling Group in your environment.

Example

moonshot ssh --name staging -i ~/.ssh/whatever -c "cat /etc/redhat-release"

Example Output

Opening SSH connection to i-04683a82f2dddcc04 (123.123.123.123)...
CentOS Linux release 7.2.1511 (Core)
Connection to 123.123.123.123 closed.