Deploy stage

The Deploy Stage is where your SAM application and all its resources are created an in an AWS account. The most common way to do this is by using CloudFormation ChangeSets to deploy. This means that this stage will have 2 actions: the CreateChangeSet and the ExecuteChangeSet.

Add the Deploy stage to your PipelineStack.java:

// Deploy stage
CloudFormationCreateReplaceChangeSetAction createChangeSet = new CloudFormationCreateReplaceChangeSetAction(CloudFormationCreateReplaceChangeSetActionProps.builder()
        .actionName("CreateChangeSet")
        .templatePath(buildOutput.atPath("packaged.yaml"))
        .stackName("sam-app")
        .adminPermissions(true)
        .changeSetName("sam-app-dev-changeset")
        .runOrder(1)
        .build());

CloudFormationExecuteChangeSetAction executeChangeSet = new CloudFormationExecuteChangeSetAction(CloudFormationExecuteChangeSetActionProps.builder()
        .actionName("Deploy")
        .stackName("sam-app")
        .changeSetName("sam-app-dev-changeset")
        .runOrder(2)
        .build());

pipeline.addStage(StageOptions.builder()
        .stageName("Dev")
        .actions(Arrays.asList(createChangeSet, executeChangeSet))
        .build());
Click here to see how the entire file should look like

Deploy the pipeline

On your terminal, run the following commands from within the pipeline directory:

cd ~/environment/sam-app/pipeline
mvn package
cdk deploy

The CLI might ask you to confirm the changes before deploying, this is because we are giving Admin permissions to the IAM role that deploys our application. This is generally not a bad practice since this role can only be assumed by CloudFormation and not by a human, however, if your organization has a stricter security posture you may want to consider creating a custom IAM deployment role with a fine grain policy.

Trigger a release

Navigate to your pipeline and you will see the Deploy stage has been added, however, it is currently grayed out because it hasn’t been triggered. Let’s just trigger a new run of the pipeline manually by clicking the Release Change buttton.

ReleaseChange