Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
218 changes: 218 additions & 0 deletions src/content/docs/azure/services/storage-accounts.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
---
title: "Storage Account"
description: Get started with Azure Storage Accounts in LocalStack
template: doc
---

import AzureFeatureCoverage from "../../../../components/feature-coverage/AzureFeatureCoverage";

## Introduction

An Azure storage account serves as a centralized container for all your data objects, including blobs, files, queues, and tables. It provides a unique, globally accessible namespace reachable via HTTP or HTTPS. For more information, see [Overview of storage accounts](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview).

LocalStack for Azure provides a local environment for building and testing applications that make use of blobs, queues, and tables. For more information, see:

- [Blob Storage](/azure/services/blob-storage)
- [Queue Storage](/azure/services/queue-storage)
- [Table Storage](/azure/services/table-storage)

The supported APIs are available on our [API Coverage section](#api-coverage), which provides information on the extent of Storage Account's integration with LocalStack.

## Getting started

This guide is designed for users new to Azure Storage Accounts and assumes basic knowledge of the Azure CLI and our `azlocal` wrapper script.

Launch LocalStack using your preferred method. For more information, see [Introduction to LocalStack for Azure](/azure/getting-started/). Once the container is running, enable Azure CLI interception by running:

```bash
azlocal start-interception
```

This command points the `az` CLI away from the public Azure management REST API and toward the LocalStack for Azure emulator API.
To revert this configuration, run:

```bash
azlocal stop-interception
```

This reconfigures the `az` CLI to send commands to the official Azure management REST API.

### Create a resource group

Create a resource group for your storage account resources:

```bash
az group create \
--name rg-storage-demo \
--location westeurope
```

```bash title="Output"
{
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-storage-demo",
"location": "westeurope",
"managedBy": null,
"name": "rg-storage-demo",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
```

### Create a storage account

Create a storage account with the `StorageV2` kind and `Standard_LRS` SKU:

```bash
az storage account create \
--name stordoc86acct \
--resource-group rg-storage-demo \
--location westeurope \
--sku Standard_LRS \
--kind StorageV2
```

```bash title="Output"
{
...
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-storage-demo/providers/Microsoft.Storage/storageAccounts/stordoc86acct",
...
"kind": "StorageV2",
"location": "westeurope",
"name": "stordoc86acct",
...
"primaryEndpoints": {
"blob": "https://stordoc86acct.blob.core.azure.localhost.localstack.cloud:4566",
"queue": "https://stordoc86acct.queue.core.azure.localhost.localstack.cloud:4566",
"table": "https://stordoc86acct.table.core.azure.localhost.localstack.cloud:4566",
...
},
"provisioningState": "Succeeded",
...
}
```

### Authentication

There are three ways to authenticate storage commands against the emulator:

#### Storage account key

Retrieve the account key and pass it with `--account-name` and `--account-key`:

```bash
ACCOUNT_KEY=$(az storage account keys list \
--account-name stordoc86acct \
--resource-group rg-storage-demo \
--query "[0].value" \
--output tsv)

az storage container list \
--account-name stordoc86acct \
--account-key "$ACCOUNT_KEY"
```

#### Login credentials

Use `--auth-mode login` to authenticate with the current session credentials:

```bash
az storage container list \
--account-name stordoc86acct \
--auth-mode login
```

#### Connection string

Bundle the account name and key into a single value:

```bash
CONNECTION_STRING=$(az storage account show-connection-string \
--name stordoc86acct \
--resource-group rg-storage-demo \
--query connectionString -o tsv)

az storage container list \
--connection-string "$CONNECTION_STRING"
```

The remaining examples in this guide use connection strings for brevity.

### Manage account keys and connection string

List the storage account access keys:

```bash
az storage account keys list \
--account-name stordoc86acct \
--resource-group rg-storage-demo
```

```bash title="Output"
[
{
"keyName": "key1",
"permissions": "FULL",
"value": "MWFjYTgyZjgtYzU0My00NjE0LThmZDctNzlkODg5ZjU4ZTE5",
"..."
},
{
"keyName": "key2",
"permissions": "FULL",
"value": "NzliNzVhN2EtYTcwZC00ZTg4LWJkMTQtYjg4MWNlMDJjZDcx",
"..."
}
]
```

Regenerate the primary key:

```bash
az storage account keys renew \
--account-name stordoc86acct \
--resource-group rg-storage-demo \
--key key1
```

Fetch a connection string for data-plane operations:

```bash
az storage account show-connection-string \
--name stordoc86acct \
--resource-group rg-storage-demo
```

```bash title="Output"
{
"connectionString": "DefaultEndpointsProtocol=https;EndpointSuffix=core.azure.localhost.localstack.cloud:4566;AccountName=stordoc86acct;AccountKey=YWQ5Y2Q2NDYtZTJmOC00ZjU3LWFmOTEtNzk5MjAxNzE1OWQx;BlobEndpoint=https://stordoc86acct.blob.core.azure.localhost.localstack.cloud:4566;FileEndpoint=https://stordoc86acct.file.core.azure.localhost.localstack.cloud:4566;QueueEndpoint=https://stordoc86acct.queue.core.azure.localhost.localstack.cloud:4566;TableEndpoint=https://stordoc86acct.table.core.azure.localhost.localstack.cloud:4566"
}
```

## Features

The Storage Account emulator supports the following features:

- **Control plane REST API**: Storage account CRUD (create, read, update, delete, list), account key management, and name availability checks via Azure Resource Manager.
- **Multiple authentication modes**: Storage account key, login credentials, and connection strings.
- **Storage account management**: Create, update, delete, and list storage accounts. Supports `StorageV2`, `BlobStorage`, and `Storage` account kinds with configurable SKU, access tier, and TLS version.
- **Account key management**: List and regenerate storage account keys (`key1`/`key2`).
- **Connection string generation**: Retrieve ready-to-use connection strings containing all service endpoints (Blob, Queue, Table, File).

## Limitations

- **Header validation**: Unsupported request headers or parameters are silently accepted instead of being rejected.
- **API version enforcement**: The emulator does not validate the `x-ms-version` header; all API versions are accepted.

## Samples

The following samples demonstrate how to use Storage Accounts with LocalStack for Azure:

- [Azure Functions Sample with LocalStack for Azure](https://github.com/localstack/localstack-azure-samples/tree/main/samples/function-app-storage-http/dotnet)
- [Azure Functions App with Managed Identity](https://github.com/localstack/localstack-azure-samples/tree/main/samples/function-app-managed-identity/python)
- [Azure Web App with Managed Identity](https://github.com/localstack/localstack-azure-samples/tree/main/samples/web-app-managed-identity/python)

## API Coverage

<AzureFeatureCoverage service="Microsoft.Storage" client:load />
11 changes: 0 additions & 11 deletions src/content/docs/azure/services/storage.mdx

This file was deleted.