How to Use the Command 'pulumi up' (with Examples)
Pulumi is an infrastructure as code tool that enables users to define, deploy, and manage cloud applications and infrastructure. The command pulumi up
is a fundamental operation in Pulumi’s command-line interface (CLI) that automates the provisioning of cloud resources defined in your program. This command allows you to preview changes, deploy applications, and update infrastructure stacks, offering an interactive and safe way to manage complex cloud environments. Below are various use cases of the pulumi up
command, each illustrating how to leverage its functionality for efficient cloud resource management.
Use Case 1: Preview and Deploy Changes to a Program and/or Infrastructure
Code:
pulumi up
Motivation:
Using the basic pulumi up
command allows you to preview changes before they are applied to your infrastructure. This is essential for understanding what modifications will be made, ensuring that unexpected changes do not occur. By using this command, you get a chance to review the proposed operations, such as creating, updating, or deleting resources, before they occur, thus maintaining control over your infrastructure.
Explanation:
pulumi up
: This command in its basic form will first display a preview of the changes Pulumi will make to your cloud infrastructure, then allows you to confirm those changes.
Example Output:
Previewing update (dev)
Type Name Plan
+ pulumi:pulumi:Stack yourproject-dev create
+ └─ aws:dynamodb:Table my-dynamodb-table create
Resources:
+ 2 to create
Do you want to perform this update? yes
Use Case 2: Automatically Approve and Perform the Update After Previewing It
Code:
pulumi up --yes
Motivation:
There are scenarios where an infrastructure update must occur without manual intervention, such as in automated CI/CD pipelines. In such cases, using the --yes
flag with pulumi up
automates the approval process, automatically applying the previewed changes. This ensures the deployment process is streamlined, reducing downtime and human error.
Explanation:
pulumi up
: Initiates the update process.--yes
: Automatically proceeds with the deployment after preview without waiting for manual confirmation, making it ideal for automated environments.
Example Output:
Previewing update (dev)
Type Name Plan
+ pulumi:pulumi:Stack yourproject-dev create
+ └─ aws:s3:Bucket my-bucket create
Resources:
+ 2 to create
Updating (dev)
Type Name Status
+ pulumi:pulumi:Stack yourproject-dev created
+ └─ aws:s3:Bucket my-bucket created
Resources:
+ 2 created
Duration: 15s
Use Case 3: Preview and Deploy Changes in a Specific Stack
Code:
pulumi up --stack stack
Motivation:
When working with multiple environments, such as development, staging, and production, defined as distinct stacks in Pulumi, it is crucial to apply changes only to the intended environment. The --stack
flag specifies which stack to target, ensuring that updates do not affect other environments inadvertently. This is particularly beneficial for development workflows where isolation between environments is necessary.
Explanation:
pulumi up
: Commence the deployment process.--stack stack
: Designates the specific stack to apply the updates to, ensuring precise control over which environment is modified.
Example Output:
Previewing update (prod)
Resources:
+ 0 to create
~ 1 to update
- 0 to delete
Updating (prod)
Resources:
~ 1 updated
Duration: 12s
Use Case 4: Don’t Display Stack Outputs
Code:
pulumi up --suppress-outputs
Motivation:
In certain situations, you might want to minimize the verbosity of the deployment feedback, particularly when outputs from the stack are either too large or not necessary for your current context. The --suppress-outputs
flag is useful to keep the display clean and concise, which can be especially beneficial in CI/CD logs.
Explanation:
pulumi up
: Executes the update process.--suppress-outputs
: Prevents the outputs of the stack from being displayed at the end of the update, resulting in a less cluttered command line output.
Example Output:
Previewing update (test)
Type Name Plan
~ aws:S3:Bucket my-bucket update
Resources:
~ 1 to update
Do you want to perform this update? yes
Updating (test)
Type Name Status
~ aws:S3:Bucket my-bucket updated
Resources:
~ 1 updated
Duration: 10s
Use Case 5: Continue Updating the Resources, Even if an Error is Encountered
Code:
pulumi up --continue-on-error
Motivation:
Complex infrastructure deployments can sometimes encounter non-critical errors that should not halt the entire deployment process. Using the --continue-on-error
flag allows the deployment to attempt to apply all changes, even if some operations fail. This can be particularly advantageous in large infrastructures where certain resources can fail but the rest of the deployment should proceed unaffected.
Explanation:
pulumi up
: Initiates the infrastructure update.--continue-on-error
: Ensures the deployment continues despite encountering errors, which allows partial application of changes and provides a more robust deployment pipeline.
Example Output:
Previewing update (prod)
Type Name Plan
~ aws:lambda:Function my-function update
~ aws:ddb:Table my-table update
Resources:
~ 2 to update
Do you want to perform this update? yes
Updating (prod)
Type Name Status
~ aws:lambda:Function my-function updated
~ aws:ddb:Table my-table **failed**: error updating
Resources:
~ 1 updated
! 1 failed
Duration: 18s
Conclusion:
The pulumi up
command is a versatile tool for deploying and managing cloud infrastructure. Each of these use cases demonstrates the flexibility and control Pulumi provides, empowering teams to automate deployment processes, manage multiple environments, and maintain robust cloud architectures efficiently. Whether used interactively or as part of an automated pipeline, pulumi up
ensures your cloud applications are defined and managed with precision.