---
title: Install and Configure
url: /docs/iac/get-started/terraform/begin/
---
## Install Pulumi

Download and install Pulumi alongside your existing Terraform setup:

<!-- chooser: os -->

<!-- option: macos -->

```bash
$ brew install pulumi/tap/pulumi
```

<!-- /option -->

<!-- option: linux -->

```bash
$ curl -fsSL https://get.pulumi.com | sh
```

<!-- /option -->

<!-- option: windows -->

> **Note:** All Windows examples in this tutorial assume you are running in PowerShell.

```bat
> choco install pulumi
```

<!-- /option -->

<!-- /chooser -->

> **Note:** Other installation options [are available](/docs/install/).

Test your new installation by running the `pulumi version` command:

<!-- chooser: os -->

<!-- option: macos -->

```bash
$ pulumi version
v3.245.0
```

If this doesn't work, you may need to restart your terminal to ensure the directory containing
the `pulumi` command is on your `PATH`.

<!-- /option -->

<!-- option: linux -->

```bash
$ pulumi version
v3.245.0
```

If this doesn't work, you may need to restart your terminal to ensure the directory containing
the `pulumi` command is on your `PATH`.

<!-- /option -->

<!-- option: windows -->

```bat
> pulumi version
v3.245.0
```

If this doesn't work, you may need to restart your terminal to ensure the directory containing
the `pulumi.exe` command is on your `PATH`.

<!-- /option -->

<!-- /chooser -->

## Configure access to AWS

Pulumi can use the same cloud provider credentials as Terraform. In this tutorial we're going to focus on AWS.
If you're already using Terraform with AWS, or if you've [installed](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) and [configured](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) the AWS CLI, your existing configuration will work with Pulumi.

You must use an IAM user account that has [programmatic access](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds-programmatic-access.html) with rights to deploy and manage S3 buckets.

### Testing access

To test that your AWS access is configured properly, run:

<!-- chooser: os -->
<!-- option: linux -->

```bash
$ aws sts get-caller-identity
```

<!-- /option -->

<!-- option: windows -->

```powershell
> aws sts get-caller-identity
```

<!-- /option -->
<!-- /chooser -->

If your AWS user ID, account, and ARN are printed, you are good to go. If not, read on:

```
{
    "UserId": "BXO3165...ZP36NYY5FOU:my-session",
    "Account": "9263...9123",
    "Arn": "arn:aws:sts::9263...9123:assumed-role/.../my-session"
}
```

### Alternative approaches

If you don't have the AWS CLI installed, or you plan on using Pulumi in a CI/CD pipeline, [retrieve your access key ID and secret access key](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) and then set the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables on your workstation:

<!-- chooser: os -->
<!-- option: linux -->

```bash
$ export AWS_ACCESS_KEY_ID="<YOUR_ACCESS_KEY_ID>"
$ export AWS_SECRET_ACCESS_KEY="<YOUR_SECRET_ACCESS_KEY>"
```

<!-- /option -->

<!-- option: windows -->

```powershell
> $env:AWS_ACCESS_KEY_ID = "<YOUR_ACCESS_KEY_ID>"
> $env:AWS_SECRET_ACCESS_KEY = "<YOUR_SECRET_ACCESS_KEY>"
```

<!-- /option -->
<!-- /chooser -->

> **Note:** Consider using [Pulumi ESC's AWS login support](/docs/esc/providers/login/aws-login) for dynamic,
short-lived AWS credentials via OpenID Connect (OIDC) instead of long-lived static credentials. This is a security best practice.

You may optionally use AWS profiles if your configuration requires them:

<!-- chooser: os -->
<!-- option: linux -->

```bash
$ export AWS_PROFILE="<YOUR_PROFILE_NAME>"
```

<!-- /option -->

<!-- option: windows -->

```powershell
> $env:AWS_PROFILE = "<YOUR_PROFILE_NAME>"
```

<!-- /option -->
<!-- /chooser -->

For detailed information on Pulumi's use of AWS credentials, see [AWS Setup](/registry/packages/aws/installation-configuration/).

## Choose your language

Next, make sure you have the necessary runtimes installed for your preferred Pulumi language:

<!-- chooser: language -->
<!-- option: typescript -->

* [Node.js](https://nodejs.org/en/download) and [npm](https://www.npmjs.com/package/npm) installed locally

<!-- /option -->

<!-- option: python -->

* [Python](https://www.python.org/downloads/) and [pip](https://pip.pypa.io/en/stable/installation/), [Poetry](https://python-poetry.org/docs/) or [uv](https://docs.astral.sh/uv/getting-started/installation/) installed locally

<!-- /option -->

<!-- option: go -->

* [Go](https://go.dev/doc/install) installed locally

<!-- /option -->

<!-- option: csharp -->

* [.NET](https://dotnet.microsoft.com/en-us/download/dotnet) installed locally

<!-- /option -->

<!-- option: java -->

* [Java 11+](https://www.oracle.com/java/technologies/downloads/) and [Maven 3.6.1+](https://maven.apache.org/install.html) installed locally

<!-- /option -->

<!-- option: yaml -->

* No additional language runtime required

<!-- /option -->
<!-- /chooser -->

## Verify CLI installation

After installing Pulumi, verify everything is in working order by running the `pulumi` CLI:

<!-- chooser: os -->

<!-- option: macos -->
```bash
$ pulumi version
```

<!-- /option -->

<!-- option: linux -->
```bash
$ pulumi version
```

<!-- /option -->

<!-- option: windows -->
```bash
> pulumi version
```

<!-- /option -->

<!-- /chooser -->

If you run into trouble, please refer to the [Download and install Pulumi](/docs/install/) page to troubleshoot your setup before moving on.

---
[← Previous step](/docs/iac/get-started/terraform/)
[Try it out →](/docs/iac/get-started/terraform/first-look/)


