---
page_title: aws_secretsmanager function reference
description: >-
  The `aws_secretsmanager` function retrieves secrets from Amazon Secrets Manager
  stores. Learn how to use the `aws_secretsmanager` function in Packer templates.
---

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
> [!IMPORTANT]  
> **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com.
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

# `aws_secretsmanager` Function

Secrets can be read from the [AWS Secrets
Manager](https://aws.amazon.com/secrets-manager/) and used within your template
as locals.

~> Note: Support for AWS secrets will always obtain the latest version of a secret, essentially
AWSCURRENT. Support for previous versions of a secret is not supported.

```hcl
aws_secretsmanager(name, key)
```

When key is not set (`null` or empty: `""`) then `aws_secretsmanager` returns
the first secret key stored in secret `name`.

You can either use this function in a `locals` block or directly inline where
you want to use the value.

```hcl
locals {
  secret = aws_secretsmanager("my_secret", null)
}

source "null" "first-example" {
  communicator = "none"
}

build {
  name = "my-build-name"
  sources = ["null.first-example"]

  provisioner "shell-local" {
    environment_vars = ["TESTVAR=${build.PackerRunUUID}"]
    inline = ["echo my_secret is '${local.secret}'",
              "echo my_secret using an inline call is '${aws_secretsmanager("my_secret", null)}'."]
  }
}
```

This will load the key stored behind `my_secret` from aws secrets manager.

The retrieval of single key secrets or plaintext secrets can be obtained by specifying (`null` or empty: `""`) as the `key`.

When obtaining secrets that have multiple keys you can set `key` to the specific key you would like
to fetch. For example, given the following secret with two keys if `key` is set to "shell" `aws_secretsmanager` will
return only its value.

```json
{
  "test": "kitchen",
  "shell": "powershell"
}
```

```hcl
locals {
  secret = aws_secretsmanager("multikey/secret", "shell")
}

source "null" "first-example" {
  communicator = "none"
}

build {
  name = "my-build-name"
  sources = ["null.first-example"]

  provisioner "shell-local" {
    environment_vars = ["TESTVAR=${build.PackerRunUUID}"]
    inline = ["echo my_secret is '${local.secret}'"]
  }
}
```

This will load the value `"powershell"` stored in the key `"shell"` behind `multikey/secret`.

In order to use this function you have to configure valid AWS credentials using
one of the following methods:

- [Environment Variables](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)
- [CLI Configuration Files](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
- [Container Credentials](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)
- [Instance Profile Credentials](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)
