From e72c11cdfe07af39bcf4b587d674db1b0206ab0c Mon Sep 17 00:00:00 2001
From: Simon Wallner
Date: Thu, 16 Nov 2023 14:25:42 +0100
Subject: [PATCH] update docs with new license management flow and UX (#864)
Co-authored-by: HarshCasper
---
.github/workflows/markdown.links.config.json | 3 +
content/en/getting-started/api-key.md | 4 +
content/en/getting-started/auth-token.md | 119 ++++++++++++++++++
content/en/getting-started/faq.md | 22 ++--
content/en/getting-started/glossary.md | 2 +-
content/en/getting-started/installation.md | 32 ++---
content/en/getting-started/quickstart.md | 8 +-
content/en/overview/_index.html | 2 +-
content/en/references/configuration.md | 4 +-
content/en/references/docker-images.md | 4 +-
.../transparent-endpoint-injection/_index.md | 2 +-
.../en/references/persistence-mechanism.md | 6 +-
content/en/references/usage-tracking.md | 10 +-
.../tutorials/ecs-ecr-container-app/index.md | 6 +-
.../en/tutorials/elb-load-balancing/index.md | 4 +-
.../tutorials/java-notification-app/index.md | 6 +-
.../lambda-ecr-container-images/index.md | 6 +-
.../index.md | 8 +-
.../schema-evolution-glue-msk/index.md | 8 +-
content/en/user-guide/ci/_index.md | 12 +-
content/en/user-guide/ci/circle-ci/index.md | 2 +-
content/en/user-guide/ci/drone-ci/index.md | 8 +-
.../en/user-guide/ci/github-actions/index.md | 16 +--
content/en/user-guide/ci/gitlab-ci/index.md | 8 +-
content/en/user-guide/ci/harness-ci/index.md | 16 +--
content/en/user-guide/ci/travis-ci/index.md | 10 +-
.../extensions/developing-extensions/index.md | 4 +-
.../extensions/managing-extensions/index.md | 6 +-
.../integrations/kafka/docker-compose.yml | 2 +-
.../tools/cloud-pods/getting-started/index.md | 8 +-
.../en/user-guide/web-application/_index.md | 4 +-
.../web-application/accounts/account.png | Bin 0 -> 7681960 bytes
.../web-application/accounts/indcomp.PNG | Bin 44340 -> 0 bytes
.../web-application/accounts/index.md | 28 ++---
.../web-application/auth-token/index.md | 29 +++++
.../web-application/ci-keys/ci-keys.png | Bin 0 -> 11672226 bytes
.../web-application/ci-keys/index.md | 33 +++++
.../cloud-pods-browser/index.md | 4 +-
.../custom-local-endpoint.md | 6 +-
.../export-import-state/index.md | 10 +-
.../extensions-library/index.md | 13 +-
.../web-application/resource-browser/index.md | 8 +-
.../web-application/single-sign-on/_index.md | 10 +-
.../single-sign-on/azure-ad/index.md | 4 +-
.../web-application/stack-insights/index.md | 10 +-
.../user-guide/web-application/teams/index.md | 27 ----
.../web-application/teams/memberroles.PNG | Bin 76344 -> 0 bytes
.../web-application/teams/teammembers.PNG | Bin 16645 -> 0 bytes
.../web-application/users-licences/index.md | 72 +++++++++++
.../users-licences/users-licences.png | Bin 0 -> 9878951 bytes
.../web-application/workspaces/index.md | 15 +++
.../web-application/workspaces/workspace.png | Bin 0 -> 11663011 bytes
52 files changed, 428 insertions(+), 193 deletions(-)
create mode 100644 content/en/getting-started/auth-token.md
create mode 100644 content/en/user-guide/web-application/accounts/account.png
delete mode 100644 content/en/user-guide/web-application/accounts/indcomp.PNG
create mode 100644 content/en/user-guide/web-application/auth-token/index.md
create mode 100644 content/en/user-guide/web-application/ci-keys/ci-keys.png
create mode 100644 content/en/user-guide/web-application/ci-keys/index.md
delete mode 100644 content/en/user-guide/web-application/teams/index.md
delete mode 100644 content/en/user-guide/web-application/teams/memberroles.PNG
delete mode 100644 content/en/user-guide/web-application/teams/teammembers.PNG
create mode 100644 content/en/user-guide/web-application/users-licences/index.md
create mode 100644 content/en/user-guide/web-application/users-licences/users-licences.png
create mode 100644 content/en/user-guide/web-application/workspaces/index.md
create mode 100644 content/en/user-guide/web-application/workspaces/workspace.png
diff --git a/.github/workflows/markdown.links.config.json b/.github/workflows/markdown.links.config.json
index 9a04b0ae10..61842f29f2 100644
--- a/.github/workflows/markdown.links.config.json
+++ b/.github/workflows/markdown.links.config.json
@@ -1,5 +1,8 @@
{
"ignorePatterns": [
+ {
+ "pattern": "https://localstack.cloud/(.*)"
+ },
{
"pattern": "https://kinesis.us-east-1.amazonaws.com/"
},
diff --git a/content/en/getting-started/api-key.md b/content/en/getting-started/api-key.md
index 2b9ab12ff6..232f92f578 100644
--- a/content/en/getting-started/api-key.md
+++ b/content/en/getting-started/api-key.md
@@ -8,6 +8,10 @@ aliases:
- /get-started/pro/
---
+{{< alert title="Important" color="danger" >}}
+API Keys are being phased out for LocalStack activation, with a transition to Auth Tokens. Auth Tokens simplify license management and eliminate the need for developers to modify their setup when there are changes to licenses. Refer to our [Auth Token documentation]({{< ref "auth-token" >}}) for more information.
+{{< /alert >}}
+
The LocalStack API key is a unique identifier to activate your LocalStack license needed to start LocalStack Pro.
You can find your API key in the [LocalStack Web app](https://app.localstack.cloud/account/apikeys).
This guide demonstrates how you can use your new LocalStack licenses and go over some best practices regarding the usage, activation, and safety of your LocalStack API key.
diff --git a/content/en/getting-started/auth-token.md b/content/en/getting-started/auth-token.md
new file mode 100644
index 0000000000..4670cd8276
--- /dev/null
+++ b/content/en/getting-started/auth-token.md
@@ -0,0 +1,119 @@
+---
+title: "Auth Token"
+weight: 20
+description: >
+ Configure your auth token to start LocalStack
+---
+
+LocalStack uses auth tokens to to authenticate users and to activate your LocalStack license.
+You can find your auth token on the [Getting Started page in the web app](https://app.localstack.cloud/getting-started) or on the [Auth Token page](https://app.localstack.cloud/workspace/auth-token)
+
+## Managing your License
+
+To get started, you need to have a LocalStack license. If you don't have one, you can [sign up for a free trial](https://localstack.cloud/pricing/) without any credit card required. The free trial will last 14 days, and you can use it to test all the features of LocalStack.
+
+You can assign licenses to users on the [Users & Licenses](https://app.localstack.cloud/workspace/members) page or you can check your assigned license on the [My License](https://app.localstack.cloud/workspace/my-license) page.
+
+{{< alert title="Important" color="danger" >}}
+- Avoid sharing your auth token with anyone. Ensure that you do not commit it to any source code management systems (like Git repositories).
+- If you push an auth token to a public repository, it has potentially been exposed and might remain in the history (even if you try to rewrite it).
+- If you accidentally publish your auth token, you can rotate it on the [Auth Token](https://app.localstack.cloud/workspace/auth-token) page
+- Use in CI or other machine environments requires a CI key. Check out our [CI documentation]({{< ref "user-guide/ci" >}}) to see the proper way to handle secrets in your CI environment to store your CI key securely.
+{{< /alert >}}
+
+### Starting LocalStack via CLI
+
+LocalStack expects your auth token to be present in the environment variable `LOCALSTACK_AUTH_TOKEN`. You can define the `LOCALSTACK_AUTH_TOKEN` environment variable before or while starting LocalStack using the `localstack` CLI.
+
+{{< tabpane >}}
+{{< tab header="macOS/Linux" lang="shell" >}}
+export LOCALSTACK_AUTH_TOKEN=
+localstack start
+{{< /tab >}}
+{{< tab header="Windows" lang="powershell" >}}
+$env:LOCALSTACK_AUTH_TOKEN=""; localstack start
+{{< /tab >}}
+{{< /tabpane >}}
+
+You can optionally run your LocalStack container in background mode by adding the `-d` flag to the `localstack start` command.
+
+The `localstack` CLI will detect the auth token and properly pass it to the LocalStack container.
+
+{{< alert title="Note" >}}
+If you are using LocalStack with an auth token, you need to pull the [LocalStack Pro image](https://docs.localstack.cloud/references/docker-images/#localstack-pro-image) that includes the Pro services and several other advanced features.
+{{< /alert >}}
+
+### Starting LocalStack via Docker
+
+To start LocalStack using Docker, you have to specify the auth token using the `-e` flag for environment variables:
+
+{{< command "hl_lines=5" >}}
+$ docker run \
+ --rm -it \
+ -p 4566:4566 \
+ -p 4510-4559:4510-4559 \
+ -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:- } \
+ localstack/localstack-pro
+{{< / command >}}
+
+For more information about starting LocalStack with Docker, take a look at our [Docker installation](https://docs.localstack.cloud/getting-started/installation/#docker) guide.
+
+### Starting LocalStack via Docker-Compose
+
+To start LocalStack using `docker-compose`, you have to include the `LOCALSTACK_AUTH_TOKEN` environment variable in your `docker-compose.yml` file:
+
+```yaml
+environment:
+ - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN- }
+```
+
+You can set the auth token manually, or you can use the `export` command to set the auth token in your current shell session. The auth token will be passed into your LocalStack container, such that the key activation can take place.
+
+## Licensing-related configuration
+
+If you want to make sure that LocalStack is only started if you can activate LocalStack Pro or Enterprise, or if you wish to suppress licensing-related error messages, take a look at our [configuration guide]({{< ref "configuration.md#localstack-pro">}}) regarding LocalStack Pro.
+
+## Checking license activation
+
+The easiest way to check if LocalStack is activated is to query the health endpoint for a list of the running services:
+
+{{< command >}}
+$ curl localhost:4566/_localstack/health | jq
+{{< / command >}}
+
+If a Pro-only [service]({{< ref "aws" >}}) -- like [XRay]({{< ref "xray" >}}) -- is running, LocalStack has started successfully. You can also check the logs of the LocalStack container to see if the activation was successful.
+
+{{< command >}}
+[...] Successfully activated license
+{{< / command >}}
+
+Otherwise, check our collected most [common activation issues](#common-activation-issues).
+
+## Common activation issues
+
+Since LocalStack v2.0.0, the image `localstack/localstack-pro` requires a successful license activation to start.
+If the license activation fails, LocalStack will quit with an error messages that may look something like this:
+
+```bash
+===============================================
+License activation failed! 🔑❌
+
+Reason: The credentials defined in your environment are invalid. Please make sure to either set the LOCALSTACK_AUTH_TOKEN variable to a valid auth token, or the LOCALSTACK_API_KEY variable to a valid LocalStack API key. You can find your auth token or API key in the LocalStack web app https://app.localstack.cloud.
+
+Due to this error, Localstack has quit. LocalStack pro features can only be used with a valid license.
+
+- Please check that your credentials are set up correctly and that you have an active license.
+ You can find your credentials in our webapp at https://app.localstack.cloud.
+- If you want to continue using LocalStack without pro features you can set `ACTIVATE_PRO=0`.
+```
+
+There are several reasons a key activation can fail:
+* Missing credentials: Using `localstack/localstack-pro` requires per default to have an auth token or legacy API key set.
+* Invalid license: there is no valid license associated with your user account, for example because the license has expired.
+* License server cannot be reached: LocalStack will try to perform an offline license activation if the license server cannot be reached, but will require a re-activation every 24 hours.
+
+If you are using the `localstack/localstack-pro` image, but cannot activate your license, we recommend falling back to the community version `localstack/localstack`.
+If that is not an option, you can set `ACTIVATE_PRO=0` which will attempt to start LocalStack without pro features.
+
+Navigate to our [FAQ page]({{< ref "faq" >}}) if your are having troubles with the LocalStack license activation.
+If you have any further problems concerning your license activation, or if the steps do not help, do not hesitate to [contact us](https://localstack.cloud/contact/).
diff --git a/content/en/getting-started/faq.md b/content/en/getting-started/faq.md
index 619badad3e..0f85f76496 100644
--- a/content/en/getting-started/faq.md
+++ b/content/en/getting-started/faq.md
@@ -3,7 +3,7 @@ title: "Frequently Asked Questions"
linkTitle: "FAQ"
weight: 40
description: >
- This page answers the frequently asked questions about LocalStack Pro, Enterprise, and Community Editions.
+ This page answers the frequently asked questions about LocalStack Pro, Enterprise, and Community Editions.
cascade:
type: docs
hide_readingtime: true
@@ -74,7 +74,7 @@ For additional known issues related to Git Bash, you can refer to the following
### How to fix LocalStack CLI (Python) UTF-8 encoding issue under Windows?
-If you are using LocalStack CLI under Windows, you might run into encoding issues. To fix this, set the following environment variables:
+If you are using LocalStack CLI under Windows, you might run into encoding issues. To fix this, set the following environment variables:
Set the system locale (language for non-Unicode programs) to UTF-8 to avoid Unicode errors.
Follow these steps:
@@ -93,8 +93,8 @@ A company proxy can lead to connection issues. To allow access to the `localstac
```yaml
...
-environment:
-- HTTP_PROXY =
+environment:
+- HTTP_PROXY =
- NO_PROXY = .s3.localhost.localstack.cloud,127.0.0.1,*.localhost
...
```
@@ -135,7 +135,7 @@ You might be able to connect to the internet, but your Docker container can't co
More details can be found on [official docker documentation](https://docs.docker.com/network/bridge/#enable-forwarding-from-docker-containers-to-the-outside-world).
-Solution for this is enabling the IP forwarding:
+Solution for this is enabling the IP forwarding:
```bash
sudo sysctl -w net.ipv4.ip_forward=1
@@ -175,7 +175,7 @@ For example, these options may interfere with the functionality of AppSync funct
We advise you to exercise caution.
{{< /alert >}}
-You can change the LocalStack `volume` folder to use the WSL Linux file system instead of the Windows host folder.
+You can change the LocalStack `volume` folder to use the WSL Linux file system instead of the Windows host folder.
To do so, you need to change the [`docker-compose.yml`](https://github.com/localstack/localstack/blob/master/docker-compose-pro.yml) file and add the following lines:
{{< tabpane text=true >}}
@@ -213,7 +213,7 @@ For more details visit [Docker WSL documentation](https://docs.docker.com/deskto
## LocalStack Platform FAQs
-### How do I check if my API key is valid and activated?
+### How do I check if my license is valid and activated?
The easiest way to check if LocalStack Pro or Enterprise is activated is to check the health endpoint of LocalStack for a list of the running services:
@@ -221,13 +221,13 @@ The easiest way to check if LocalStack Pro or Enterprise is activated is to chec
$ curl localhost:4566/_localstack/health | jq
{{< / command >}}
-If a Pro-only [service]({{< ref "aws" >}}) -- like [XRay]({{< ref "xray" >}}) -- is running, LocalStack Pro or Enterprise has started successfully. If your API key is invalid, you will see an error message like this in the logs of LocalStack:
+If a Pro-only [service]({{< ref "aws" >}}) -- like [XRay]({{< ref "xray" >}}) -- is running, LocalStack Pro or Enterprise has started successfully. If your auth token is invalid, you will see an error message like this in the logs of LocalStack:
```bash
-Activation key "abc..."(10) is invalid or expired! Reason: ...
+license activation failed! Reason: ...
```
-If this error occurs, something is wrong with your API key or license. Make sure your API key is set correctly (check for typos!) and your license is valid. If the API key still does not work, please [contact us](https://localstack.cloud/contact/).
+If this error occurs, something is wrong with your auth token or license. Make sure your auth token is set correctly (check for typos!) and your license is valid. If the auth token still does not work, please [contact us](https://localstack.cloud/contact/).
### How are CI credits in LocalStack calculated?
@@ -269,7 +269,7 @@ Some corporate DNS servers might filter requests to certain domains. Contact you
We take security seriously and respond to any emergency vulnerabilities as soon as possible. Our cloud provider (AWS) handles most of the infrastructure maintenance for us. We also use Infrastructure-as-Code scripts to ensure that our infrastructure configuration is consistent and recoverable in case of a disaster.
-### How does LocalStack ensure the security of its containers and images?
+### How does LocalStack ensure the security of its containers and images?
Our software assets are regularly checked for vulnerabilities, such as code issues and outdated dependencies. We use Dependabot to scan our GitHub repositories, and Trivy as well as Snyk (among other security tools) to scan our Docker images.
diff --git a/content/en/getting-started/glossary.md b/content/en/getting-started/glossary.md
index de90224355..b51829675b 100644
--- a/content/en/getting-started/glossary.md
+++ b/content/en/getting-started/glossary.md
@@ -18,7 +18,7 @@ hide_readingtime: true
| [Edge Port]({{< ref "endpoint-url" >}}) | The HTTP port LocalStack listens on for any type of request (e.g. from AWS SDKs). The default port is 4566. |
| [External Service Ports]({{< ref "external-ports" >}}) | The ports reserved for infrastructure that is started as part of a managed service like database server, Redis cluster, and are exposed through the LocalStack Container. |
| [Lambda Hot Reloading]({{< ref "hot-reloading" >}}) | The ability to make changes in Lambda handler files, and have them immediately reflected on each invocation of a Lambda function, without the need to redeploy the Lambda function. |
-| [LocalStack API Key]({{< ref "api-key" >}}) | An API key that can be configured via the LOCALSTACK_API_KEY environment variable, to enable advanced features in your LocalStack instance. We distinguish between individual developer keys, as well as CI keys for continuous integration environments (e.g., Github Actions, CircleCI, etc). |
+| [LocalStack auth token]({{< ref "auth-token" >}}) | An auth token that can be configured via the LOCALSTACK_AUTH_TOKEN environment variable, to enable advanced features in your LocalStack instance. We distinguish between individual developer auth tokens, as well as CI keys for continuous integration environments (e.g., Github Actions, CircleCI, etc). |
| [LocalStack Container]({{< ref "installation" >}}) | The Docker/Podman container or Kubernetes pod running LocalStack. |
| [LocalStack Extensions]({{< ref "references/extensions" >}}) | Extend and customize LocalStack using pluggable Python distributions to run applications alongside the main process in the LocalStack Docker container. |
| [LocalStack Platform]({{< ref "web-application" >}}) | The LocalStack Web Application for licensed users to use advanced features, such as Stack Insights, CI Analytics, Resource Browser, and Team Collaboration. |
diff --git a/content/en/getting-started/installation.md b/content/en/getting-started/installation.md
index 7d2dd7839c..4c480d5789 100644
--- a/content/en/getting-started/installation.md
+++ b/content/en/getting-started/installation.md
@@ -60,7 +60,7 @@ $ python3 -m pip install --upgrade localstack
{{% /markdown %}}
{{< alert title="Important" color="danger" >}}
-Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
+Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
If you have problems with permissions in MacOS X Sierra, install with `python3 -m pip install --user localstack`.
{{< /alert >}}
@@ -119,7 +119,7 @@ $ python3 -m pip install --upgrade localstack
{{< / command >}}
{{% /markdown %}}
{{< alert title="Important" color="danger" >}}
-Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
+Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
{{< /alert >}}
{{< /tab >}}
@@ -127,7 +127,7 @@ Do not use `sudo` or the `root` user - LocalStack should be installed and starte
{{< tab header="Windows" >}}
-You can download the respective binary for your architecture directly:
+You can download the respective binary for your architecture directly:
{{< cli-binary-download os="windows" >}}
Then extract the archive and execute the binary using Powershell.
@@ -146,7 +146,7 @@ $ python3 -m pip install --upgrade localstack
{{% /markdown %}}
{{< alert title="Important" color="danger" >}}
-Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
+Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
{{< /alert >}}
{{< /tab >}}
@@ -168,7 +168,7 @@ $ python3 -m pip install --upgrade localstack
{{< alert title="Note" >}}
To download a specific version of LocalStack, check out our [release page](https://github.com/localstack/localstack) and download it in the following manner:
-{{< command >}}
+{{< command >}}
$ python3 -m pip install localstack==
{{< / command >}}
{{% markdown %}}
@@ -177,7 +177,7 @@ Here `` depicts the particular LocalStack version that you would like t
{{< /alert >}}
{{< alert title="Important" color="danger" >}}
-Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
+Do not use `sudo` or the `root` user - LocalStack should be installed and started entirely under a local non-root user.
{{< /alert >}}
{{< /tab >}}
{{< /tabpane >}}
@@ -189,7 +189,7 @@ $ localstack --version
{{< / command >}}
You are all set!
-To use all of LocalStack's features we recommend to [get a LocalStack account and set up your api key]({{< ref "api-key" >}}).
+To use all of LocalStack's features we recommend to [get a LocalStack account and set up your auth token]({{< ref "auth-token" >}}).
Afterwards, check out our [Quickstart guide]({{< ref "quickstart" >}}) to start your local cloud!
## Alternatives
@@ -272,7 +272,7 @@ services:
environment:
- DEBUG=${DEBUG-}
- PERSISTENCE=${PERSISTENCE-}
- - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY-} # required for Pro
+ - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN-} # required for Pro
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
@@ -290,7 +290,7 @@ $ docker-compose up
- This command pulls the current nightly build from the `master` branch (if you don't have the image locally) and **not** the latest supported version.
If you want to use a specific version, set the appropriate localstack image tag at `services.localstack.image` in the `docker-compose.yml` file (for example `localstack/localstack:`).
-- If you are using LocalStack with an [API key]({{< ref "api-key" >}}), you need to specify the image tag as `localstack/localstack-pro` in the `docker-compose.yml` file.
+- If you are using LocalStack with an [auth token]({{< ref "auth-token" >}}), you need to specify the image tag as `localstack/localstack-pro` in the `docker-compose.yml` file.
Going forward, `localstack/localstack-pro` image will contain our Pro-supported services and APIs.
- This command reuses the image if it's already on your machine, i.e. it will **not** pull the latest image automatically from Docker Hub.
@@ -303,7 +303,7 @@ $ docker-compose up
- If using the Docker default bridge network using `network_mode: bridge`, container name resolution will not work inside your containers.
Please consider removing it, if this functionality is needed.
-- To configure an API key, refer to the [API Key](https://docs.localstack.cloud/getting-started/api-key/) documentation.
+- To configure an auth token, refer to the [auth token]({{< ref "auth-token" >}}) documentation.
{{< /alert >}}
Please note that there are a few pitfalls when configuring your stack manually via docker-compose (e.g., required container name, Docker network, volume mounts, and environment variables).
@@ -342,7 +342,7 @@ docker run \
--rm -it \
-p 4566:4566 \
-p 4510-4559:4510-4559 \
- -e LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY:- } \
+ -e LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN:- } \
localstack/localstack-pro{{< /tab >}}
{{< /tabpane >}}
@@ -350,7 +350,7 @@ docker run \
- This command pulls the current nightly build from the `master` branch (if you don't have the image locally) and **not** the latest supported version.
If you want to use a specific version of LocalStack, use the appropriate tag: `docker run --rm -it -p 4566:4566 -p 4510-4559:4510-4559 localstack/localstack:`. Check-out the [LocalStack releases](https://github.com/localstack/localstack/releases) to know more about specific LocalStack versions.
-- If you are using LocalStack with an [API key]({{< ref "api-key" >}}), you need to specify the image tag as `localstack/localstack-pro` in your Docker setup.
+- If you are using LocalStack with an [auth token]({{< ref "auth-token" >}}), you need to specify the image tag as `localstack/localstack-pro` in your Docker setup.
Going forward, `localstack/localstack-pro` image will contain our Pro-supported services and APIs.
- This command reuses the image if it's already on your machine, i.e. it will **not** pull the latest image automatically from Docker Hub.
@@ -362,7 +362,7 @@ docker run \
- To facilitate interoperability, configuration variables can be prefixed with `LOCALSTACK_` in docker. For instance, setting `LOCALSTACK_PERSISTENCE=1` is equivalent to `PERSISTENCE=1`.
-- To configure an API key, refer to the [API Key](https://docs.localstack.cloud/getting-started/api-key/) documentation.
+- To configure an auth token, refer to the [auth token]({{< ref "auth-token" >}}) documentation.
{{< /alert >}}
### Helm
@@ -425,13 +425,13 @@ If you have installed the CLI with Brew or directly as a binary, please simply p
You can now avail logging output and error reporting using LocalStack logs. To access the logs, run the following command:
{{< command >}}
- $ localstack logs
+ $ localstack logs
{{< / command >}}
-
+
AWS requests are now logged uniformly in the INFO log level (set by default or when `DEBUG=0`).
The shape is `AWS . => ()`.
Requests to HTTP endpoints are logged in a similar way:
-
+
```sh
2022-09-12T10:39:21.165 INFO --- [ asgi_gw_0] localstack.request.aws : AWS s3.ListBuckets => 200
2022-09-12T10:39:41.315 INFO --- [ asgi_gw_0] localstack.request.aws : AWS s3.CreateBucket => 200
diff --git a/content/en/getting-started/quickstart.md b/content/en/getting-started/quickstart.md
index 0b4a459861..7f69c5faad 100644
--- a/content/en/getting-started/quickstart.md
+++ b/content/en/getting-started/quickstart.md
@@ -8,7 +8,7 @@ cascade:
type: docs
---
-This quickstart guide will walk you through starting LocalStack on your local machine to deploying a sample AWS application locally using LocalStack's cloud emulation. This guide assumes that you have [installed LocalStack on your local machine]({{< ref "installation" >}}), [signed up](https://app.localstack.cloud) for a LocalStack account and configured your [API key]({{< ref "api-key" >}}) to authenticate your LocalStack container on startup.
+This quickstart guide will walk you through starting LocalStack on your local machine to deploying a sample AWS application locally using LocalStack's cloud emulation. This guide assumes that you have [installed LocalStack on your local machine]({{< ref "installation" >}}), [signed up](https://app.localstack.cloud) for a LocalStack account and configured your [auth token]({{< ref "auth-token" >}}) to authenticate your LocalStack container on startup.
{{< alert title="Note" >}}
The quickest way to experiment with LocalStack is to use one of our [LocalStack quickstart samples](https://app.localstack.cloud/quickstart) to deploy a thumbnail creator, request worker application, or an asynchronous microservice with tracing/debugging. The quickstart samples will automatically connect to your running LocalStack container on your local machine and run the applications.
@@ -18,7 +18,7 @@ To quickly see the outcome of this quickstart guide, try deploying the [Request
## Start your LocalStack container
-After installing LocalStack and configuring your API key, let us start LocalStack. To run our sample AWS application, we will start LocalStack using the `localstack` CLI.
+After installing LocalStack and configuring your auth token, let us start LocalStack. To run our sample AWS application, we will start LocalStack using the `localstack` CLI.
{{< command >}}
$ localstack start
@@ -34,8 +34,8 @@ You can optionally run your LocalStack container in background mode by adding th
- The default image [`localstack/localstack`](https://hub.docker.com/r/localstack/localstack) on Docker Hub refers to the community version of LocalStack.
The [`localstack/localstack-pro`](https://hub.docker.com/r/localstack/localstack-pro) image refers to the Pro version of LocalStack. Previously we maintained `localstack-light` and `localstack-full` images which have been deprecated and removed with the LocalStack 2.0 release.
-- If an [API key]({{< ref "api-key" >}}) is set in your environment, `localstack start` will attempt to start LocalStack with the `localstack/localtack-pro` image.
- A successful key activation is required to start LocalStack Pro but can be disabled by setting `ACTIVATE_PRO=0`.
+- If an [auth token]({{< ref "auth-token" >}}) is set in your environment, `localstack start` will attempt to start LocalStack with the `localstack/localtack-pro` image.
+ A successful license activation is required to start LocalStack Pro but can be disabled by setting `ACTIVATE_PRO=0`.
{{< /alert >}}
## Setup the sample AWS application
diff --git a/content/en/overview/_index.html b/content/en/overview/_index.html
index a557e2cf01..66532ec498 100644
--- a/content/en/overview/_index.html
+++ b/content/en/overview/_index.html
@@ -107,7 +107,7 @@ Featured guides and articles
- - }}">How do I get started with a LocalStack API key?
+ - }}">How do I get started with a LocalStack auth token?
- }}">What are Local Cloud Pods and how do I use them?
- }}">How LocalStack improves your Lambda developer experience
- }}">Which AWS services does LocalStack support?
diff --git a/content/en/references/configuration.md b/content/en/references/configuration.md
index 2e221c3144..aac40f84e0 100644
--- a/content/en/references/configuration.md
+++ b/content/en/references/configuration.md
@@ -310,7 +310,7 @@ To learn more about these configuration options, see [DNS Server]({{< ref "dns-s
| Variable | Example Values | Description |
|----------------------|----------------| - |
| `ACTIVATE_PRO` | 1 (default) | Whether pro should be activated or not. This is set to true by default if using the `localstack/localstack-pro` container image. If set to `1`, LocalStack will fail to start if the license key activation did not work. If set to `0`, an attempt is made to start LocalStack without pro features.
-| `LOCALSTACK_API_KEY` | | API key to activate LocalStack Pro.
+| `LOCALSTACK_AUTH_TOKEN` | | AUTH_TOKEN to activate LocalStack Pro.
| `LOG_LICENSE_ISSUES` | 1 (default) | Whether to log issues with the license activation to the console.
@@ -362,7 +362,7 @@ Here is an example of what a specific environment profile looks like
{{< command >}}
$ cat ~/.localstack/pro-debug.env
-LOCALSTACK_API_KEY=XXXXX
+LOCALSTACK_AUTH_TOKEN=XXXXX
DEBUG=1
DEVELOP=1
{{< / command >}}
diff --git a/content/en/references/docker-images.md b/content/en/references/docker-images.md
index e2a19d4afa..3a4b9e459d 100644
--- a/content/en/references/docker-images.md
+++ b/content/en/references/docker-images.md
@@ -17,7 +17,7 @@ The LocalStack Community image (`localstack/localstack`) contains the community
$ docker pull localstack/localstack:latest
{{< / command >}}
-To use the LocalStack Community image, you don't need to sign-up for an account on [LocalStack Web Application](https://app.localstack.cloud). The Community image is free to use and does not require any API key to run. The Community image can be used to run [local AWS services](https://docs.localstack.cloud/user-guide/aws/) with [integrations](https://docs.localstack.cloud/user-guide/integrations/) on your local machine or in your [continuous integration pipelines](https://docs.localstack.cloud/user-guide/ci/).
+To use the LocalStack Community image, you don't need to sign-up for an account on [LocalStack Web Application](https://app.localstack.cloud). The Community image is free to use and does not require any API key to run. The Community image can be used to run [local AWS services](https://docs.localstack.cloud/user-guide/aws/) with [integrations](https://docs.localstack.cloud/user-guide/integrations/) on your local machine or in your [continuous integration pipelines](https://docs.localstack.cloud/user-guide/ci/).
The Community image also covers a limited set of [LocalStack Tools](https://docs.localstack.cloud/user-guide/tools/) to make your life as a cloud developer easier. You can use [LocalStack Cockpit](https://localstack.cloud/products/cockpit/) or [LocalStack Docker Extension](https://docs.localstack.cloud/user-guide/tools/localstack-docker-extension/) to use LocalStack with a graphical user interface.
@@ -31,7 +31,7 @@ LocalStack Pro contains various advanced extensions to the LocalStack base platf
$ docker pull localstack/localstack-pro:latest
{{< / command >}}
-To use the LocalStack Pro image, you must configure an environment variable named `LOCALSTACK_API_KEY` to contain your API key. The LocalStack Pro image will display a warning if you do not set an API key (or if the key is invalid/expired) and will not activate the Pro features. LocalStack Pro gives you access to the complete set of LocalStack features, including the [LocalStack Web Application](https://app.localstack.cloud) and [dedicated customer support](https://docs.localstack.cloud/getting-started/help-and-support/#pro-support).
+To use the LocalStack Pro image, you must configure an environment variable named `LOCALSTACK_AUTH_TOKEN` to contain your auth token. The LocalStack Pro image will display a warning if you do not set an auth token (or if the license is invalid/expired) and will not activate the Pro features. LocalStack Pro gives you access to the complete set of LocalStack features, including the [LocalStack Web Application](https://app.localstack.cloud) and [dedicated customer support](https://docs.localstack.cloud/getting-started/help-and-support/#pro-support).
You can use the Pro image to start your LocalStack container using various [installation methods](https://docs.localstack.cloud/getting-started/installation/). While configuring to run LocalStack with Docker or Docker Compose, run the `localstack/localstack-pro` image with the appropriate tag you have pulled (if not `latest`).
diff --git a/content/en/references/network-troubleshooting/transparent-endpoint-injection/_index.md b/content/en/references/network-troubleshooting/transparent-endpoint-injection/_index.md
index 16af1e8743..d2d616d0d7 100644
--- a/content/en/references/network-troubleshooting/transparent-endpoint-injection/_index.md
+++ b/content/en/references/network-troubleshooting/transparent-endpoint-injection/_index.md
@@ -12,7 +12,7 @@ Suppose you're attempting to access LocalStack, but you're relying on transparen
{{< figure src="../images/2.svg" width="400" >}}
-If you're using LocalStack with an [API key]({{[}}), then you can utilize the [DNS server]({{][}}) to perform requests to LocalStack as if it were AWS.
+If you're using LocalStack with an [auth token]({{][}}), then you can utilize the [DNS server]({{][}}) to perform requests to LocalStack as if it were AWS.
You need to make two changes:
* Publish port 53 from the LocalStack docker container to your host.
diff --git a/content/en/references/persistence-mechanism.md b/content/en/references/persistence-mechanism.md
index bca2b191e1..73421875a6 100644
--- a/content/en/references/persistence-mechanism.md
+++ b/content/en/references/persistence-mechanism.md
@@ -26,19 +26,19 @@ When you restart LocalStack, you can resume your work from where you left off.
{{< tabpane >}}
{{< tab header="LocalStack CLI" lang="bash" >}}
-LOCALSTACK_API_KEY=... PERSISTENCE=1 localstack start
+LOCALSTACK_AUTH_TOKEN=... PERSISTENCE=1 localstack start
{{< /tab >}}
{{< tab header="Docker Compose" lang="yaml" >}}
...
image: localstack/localstack-pro
environment:
- - LOCALSTACK_API_KEY=...
+ - LOCALSTACK_AUTH_TOKEN=...
- PERSISTENCE=1
volumes:
- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
{{< /tab >}}
{{< tab header="Docker" lang="bash" >}}
-docker run -e LOCALSTACK_API_KEY=... -e PERSISTENCE=1 -v ./volume:/var/lib/localstack -p 4566:4566 localstack/localstack-pro
+docker run -e LOCALSTACK_AUTH_TOKEN=... -e PERSISTENCE=1 -v ./volume:/var/lib/localstack -p 4566:4566 localstack/localstack-pro
{{< /tab >}}
{{< /tabpane >}}
diff --git a/content/en/references/usage-tracking.md b/content/en/references/usage-tracking.md
index 6745284072..c3f5450939 100644
--- a/content/en/references/usage-tracking.md
+++ b/content/en/references/usage-tracking.md
@@ -9,7 +9,7 @@ aliases:
## Overview
-For API Key activations, we track the timestamp and the API key. We need to do this to make CI credits work. It is tracked regardless of whether the user disables event tracking since we collect this in the backend, not the client.
+For license activations, we track the timestamp and the licensing credentials. We need to do this to make CI credits work. It is tracked regardless of whether the user disables event tracking since we collect this in the backend, not the client.
## LocalStack usage statistics
@@ -20,7 +20,7 @@ For Pro users, most of the information is collected to populate the [Stack Insig
The current usage event collection on the client side includes:
- A randomly generated ID pertaining to the session
-- The API Key (if any)
+- The auth token or legacyAPI key (if any)
- A randomly generated machine ID is kept throughout the session but deleted once the LocalStack cache directory is removed
- The operating system (mostly Linux since LocalStack typically runs in our Debian container)
- The LocalStack version being used
@@ -58,7 +58,7 @@ The AWS API call metadata includes:
Here is an example of AWS API call metadata:
-```json
+```json
{
"name": "aws_request",
"metadata": {
@@ -83,7 +83,7 @@ For the community version, we only track service, operation, status code, and ho
### CLI invocations
-We collect an anonymized event if a CLI command was invoked, but do not collect any of the parameter values. This event is not connected to the session or the API key.
+We collect an anonymized event if a CLI command was invoked, but do not collect any of the parameter values. This event is not connected to the session or the auth token.
Here is an example of a CLI invocation event:
@@ -109,7 +109,7 @@ We collect the usage of particular features in an anonymized and aggregated way.
- If you use init scripts, we collect the stage, how many scripts are being executed, and how long they took
- Nothing else at the moment, but we may track additional features
-## What we are not collecting?
+## What we are not collecting?
- Specific LocalStack configuration values
- Content or file names of files being uploaded to S3
diff --git a/content/en/tutorials/ecs-ecr-container-app/index.md b/content/en/tutorials/ecs-ecr-container-app/index.md
index 3fad332deb..0db2965367 100644
--- a/content/en/tutorials/ecs-ecr-container-app/index.md
+++ b/content/en/tutorials/ecs-ecr-container-app/index.md
@@ -33,7 +33,7 @@ ECS tasks can pull container images from ECR repositories and are customizable u
## Prerequisites
- [LocalStack Pro](https://localstack.cloud/pricing/)
-- [awslocal](https://docs.localstack.cloud/integrations/aws-cli/#localstack-aws-cli-awslocal)
+- [awslocal]({{< ref "aws-cli#localstack-aws-cli-awslocal" >}})
- [Docker](https://docker.io/)
- [`cURL`](https://curl.se/download.html)
@@ -47,10 +47,10 @@ FROM nginx
ENV foo=bar
```
-The `Dockerfile` uses the official `nginx` image from Docker Hub, which allows us to serve the default index page. Before building our Docker image, we need to start LocalStack and create an ECR repository to push our Docker image. To start LocalStack with the `LOCALSTACK_API_KEY` environment variable, run the following command:
+The `Dockerfile` uses the official `nginx` image from Docker Hub, which allows us to serve the default index page. Before building our Docker image, we need to start LocalStack and create an ECR repository to push our Docker image. To start LocalStack with the `LOCALSTACK_AUTH_TOKEN` environment variable, run the following command:
{{< command >}}
-$ LOCALSTACK_API_KEY= localstack start -d
+$ LOCALSTACK_AUTH_TOKEN= localstack start -d
{{< / command >}}
Next, we will create an ECR repository to push our Docker image. We will use the `awslocal` CLI to create the repository.
diff --git a/content/en/tutorials/elb-load-balancing/index.md b/content/en/tutorials/elb-load-balancing/index.md
index b99d3c8454..41ce0c2d96 100644
--- a/content/en/tutorials/elb-load-balancing/index.md
+++ b/content/en/tutorials/elb-load-balancing/index.md
@@ -37,7 +37,7 @@ In this tutorial we focus on the Application Load Balancer (ALB), which operates
- LocalStack Pro
- [Serverless framework](https://www.serverless.com/framework/docs/getting-started/)
- [Node.js & `npm`](https://nodejs.org/en/download/)
-- [`awslocal`](https://docs.localstack.cloud/integrations/aws-cli/#localstack-aws-cli-awslocal)
+- [awslocal]({{< ref "aws-cli#localstack-aws-cli-awslocal" >}})
- `cURL` & `jq`
## Setup a Serverless project
@@ -264,7 +264,7 @@ With these resource definitions, you have completed the configuration of your Se
Now that we have completed the initial setup let's run LocalStack's AWS emulation on our local machine. Start LocalStack by running the following command:
{{< command >}}
-$ LOCALSTACK_API_KEY= localstack start -d
+$ LOCALSTACK_AUTH_TOKEN= localstack start -d
{{< / command >}}
This command launches LocalStack in the background, enabling you to use the AWS services locally. Now, let's deploy our Serverless project and verify the resources created in LocalStack. Run the following command:
diff --git a/content/en/tutorials/java-notification-app/index.md b/content/en/tutorials/java-notification-app/index.md
index 0bd58b224d..3a6856dff5 100644
--- a/content/en/tutorials/java-notification-app/index.md
+++ b/content/en/tutorials/java-notification-app/index.md
@@ -41,7 +41,7 @@ For this tutorial, you will need:
- [LocalStack Pro](https://localstack.cloud/pricing/) to emulate the AWS services (SNS, SQS, SES, etc) locally
- Don't worry, if you don't have a subscription yet, you can just get a trial license for free.
-- [awslocal](https://docs.localstack.cloud/integrations/aws-cli/#localstack-aws-cli-awslocal)
+- [awslocal]({{< ref "aws-cli#localstack-aws-cli-awslocal" >}})
- [Docker](https://docker.io/)
- Java 11+
- Maven 3+
@@ -522,7 +522,7 @@ services:
- DEBUG=1
- HOST_TMP_FOLDER=${TMPDIR:-/tmp/}localstack
- DOCKER_HOST=unix:///var/run/docker.sock
- - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY-}
+ - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN-}
- SMTP_HOST=smtp:1025
volumes:
- "${TMPDIR:-/tmp}/localstack:/tmp/localstack"
@@ -538,7 +538,7 @@ services:
The above `docker-compose` file will start LocalStack and pull the MailHog image to start the SMTP server (if it doesn't exist yet!) on port `8025`. You can start LocalStack using the following command:
{{< command >}}
-$ LOCALSTACK_API_KEY= docker-compose up -d
+$ LOCALSTACK_AUTH_TOKEN= docker-compose up -d
{{< / command >}}
Once LocalStack is started, we can deploy the CloudFormation stack (which might take a few moments):
diff --git a/content/en/tutorials/lambda-ecr-container-images/index.md b/content/en/tutorials/lambda-ecr-container-images/index.md
index c2678e96ec..9222a8f178 100644
--- a/content/en/tutorials/lambda-ecr-container-images/index.md
+++ b/content/en/tutorials/lambda-ecr-container-images/index.md
@@ -34,7 +34,7 @@ leadimage: "lambda-ecr-container-images-featured-image.png"
Before diving into this tutorial, make sure you have the following prerequisites:
- LocalStack Pro
-- [`awslocal` CLI](https://docs.localstack.cloud/integrations/aws-cli/#localstack-aws-cli-awslocal)
+- [awslocal]({{< ref "aws-cli#localstack-aws-cli-awslocal" >}})
- [Python](https://www.python.org/downloads/)
- [Docker](https://docker.io/)
@@ -90,10 +90,10 @@ By executing these steps, you have defined the Dockerfile that instructs Docker
## Publishing the image to ECR
-Now that the initial setup is complete let's explore how to leverage LocalStack's AWS emulation by pushing our image to ECR and deploying the Lambda container image. Start LocalStack by executing the following command. Make sure to replace `` with your actual API key:
+Now that the initial setup is complete let's explore how to leverage LocalStack's AWS emulation by pushing our image to ECR and deploying the Lambda container image. Start LocalStack by executing the following command. Make sure to replace `` with your actual auth token:
{{< command >}}
-$ LOCALSTACK_API_KEY= DEBUG=1 localstack start -d
+$ LOCALSTACK_AUTH_TOKEN= DEBUG=1 localstack start -d
{{< / command >}}
Once the LocalStack container is running, we can create a new ECR repository to store our container image. Use the `awslocal` CLI to achieve this. Run the following command to create the repository, replacing `localstack-lambda-container-image` with the desired name for your repository:
diff --git a/content/en/tutorials/reproducible-machine-learning-cloud-pods/index.md b/content/en/tutorials/reproducible-machine-learning-cloud-pods/index.md
index b4f4a87773..63a18611a1 100644
--- a/content/en/tutorials/reproducible-machine-learning-cloud-pods/index.md
+++ b/content/en/tutorials/reproducible-machine-learning-cloud-pods/index.md
@@ -28,7 +28,7 @@ leadimage: "reproducible-machine-learning-cloud-pods-featured-image.png"
Cloud Pods is supported by both [LocalStack Pro](https://app.localstack.cloud/) and [LocalStack Community](https://github.com/localstack/localstack). Using [Community Cloud Pods]({{< ref "user-guide/tools/cloud-pods/community" >}}), you get a limited experience saving and loading your LocalStack state in a Cloud Pod, only with the AWS services emulated in the Community Edition. With LocalStack Pro, you can utilize an extended CLI that allows you to inspect your Cloud Pods, version them using tags, and push them to the LocalStack platform for storage and collaboration.
-In this tutorial, we will use [LocalStack Pro]({{< ref "getting-started/api-key" >}}) to train a simple machine-learning model that recognizes handwritten digits on an image. We will rely on Cloud Pods to create a reproducible sample by using:
+In this tutorial, we will use [LocalStack Pro]({{< ref "getting-started/auth-token" >}}) to train a simple machine-learning model that recognizes handwritten digits on an image. We will rely on Cloud Pods to create a reproducible sample by using:
- S3 to create a bucket to host our training data
- Lambda to create a function to train and save the model to an S3 bucket
@@ -44,7 +44,7 @@ We will then create a Cloud Pod to save the state of our LocalStack instance and
For this tutorial, you will need the following:
- [LocalStack Pro](https://localstack.cloud/pricing/)
-- [`awslocal` CLI](https://docs.localstack.cloud/integrations/aws-cli/#localstack-aws-cli-awslocal)
+- [awslocal]({{< ref "aws-cli#localstack-aws-cli-awslocal" >}})
- [Optical recognition of handwritten digits dataset](https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits)
If you don't have a subscription to LocalStack Pro, you can request a trial license upon sign-up. For this tutorial to work, you must have the LocalStack CLI installed, which must be version 1.3 or higher. The Cloud Pods CLI is shipped with the LocalStack CLI, so you don't need to install it separately.
@@ -174,7 +174,7 @@ To perform inference on the test set, we will download both the trained SVN mode
Before creating our Lambda functions, let us start LocalStack to use emulated S3 and Lambda services to deploy and train our model. Let's start LocalStack:
{{< command >}}
-$ DEBUG=1 LOCALSTACK_API_KEY= localstack start -d
+$ DEBUG=1 LOCALSTACK_AUTH_TOKEN= localstack start -d
{{< / command >}}
We have specified `DEBUG=1` to get the printed LocalStack logs from our Lambda invocation in the console. We can now create an S3 bucket to upload our Lambda functions and the dataset:
@@ -282,7 +282,7 @@ $ localstack pod save --name --visibility public
The above command does not create a new version and requires a version already registered with the platform.
{{< /alert >}}
-You can also attach an optional message and a list of services to a Cloud Pod using the `--message` and `--services` flags. You can check all the Cloud Pods in your organization over the [LocalStack Web Application](https://app.localstack.cloud/cloudpods). Now that we have created a Cloud Pod, we can ask one of our team members to start LocalStack and load the Cloud Pod using the `load` command.
+You can also attach an optional message and a list of services to a Cloud Pod using the `--message` and `--services` flags. You can check all the Cloud Pods in your organization over the [LocalStack Web Application](https://app.localstack.cloud/pods). Now that we have created a Cloud Pod, we can ask one of our team members to start LocalStack and load the Cloud Pod using the `load` command.
{{< command >}}
$ localstack pod load reproducible-ml
diff --git a/content/en/tutorials/schema-evolution-glue-msk/index.md b/content/en/tutorials/schema-evolution-glue-msk/index.md
index dc0fbeb031..78573f394d 100644
--- a/content/en/tutorials/schema-evolution-glue-msk/index.md
+++ b/content/en/tutorials/schema-evolution-glue-msk/index.md
@@ -25,7 +25,7 @@ leadimage: "schema-evolution-glue-msk-featured-image.png"
[Apache Kafka](https://kafka.apache.org/) is an open-source distributed event store and stream-processing platform. It is used to capture data generated by producers and distribute it among its consumers. Kafka is known for its scalability, with reports of production environments scaling to [trillions of messages per day](https://engineering.linkedin.com/blog/2019/apache-kafka-trillion-messages). With [Amazon Managed Streaming for Apache Kafka (MSK)](https://aws.amazon.com/msk/), AWS provides a service to provision Apache Kafka clusters easily.
-[LocalStack Pro](https://app.localstack.cloud/) supports [Amazon Managed Streaming for Kafka (MSK)](https://docs.localstack.cloud/aws/managed-streaming-for-kafka/), which enables you to spin up Kafka clusters on your local machine and test the integration of your applications with Amazon MSK.
+[LocalStack Pro](https://app.localstack.cloud/) supports [Amazon Managed Streaming for Kafka (MSK)]({{< ref "managed-streaming-for-kafka" >}}), which enables you to spin up Kafka clusters on your local machine and test the integration of your applications with Amazon MSK.
Kafka clusters are often used as the central messaging infrastructure in complex microservice environments.
However, the continuous and independent development of the individual microservices - the data producers and consumers - can make it hard to coordinate and evolve data schemas over time without introducing application failures due to incompatibilities. A common solution to this problem is to use a schema registry which provides for the validation of schema changes, preventing any unsafe changes and subsequent application failures.
@@ -46,7 +46,7 @@ The following chart shows the integration of producers and consumers with Amazon
3. The consumer reads the serialized and compressed record.
4. The consumer requests the schema from the schema registry (if it is not already cached) and uses the schema to decompress and deserialize the record.
-[AWS Glue Schema Registry](https://docs.localstack.cloud/aws/glue/) is supported by LocalStack Pro as well, ultimately allowing you to test the evolution of your data streaming application completely on your local machine. It allows you develop and test your application's data schema evolution locally. The code for this tutorial (including a script to execute it step-by-step) can be found in our [LocalStack Pro samples over GitHub](https://github.com/localstack/localstack-pro-samples/tree/master/glue-msk-schema-registry).
+[AWS Glue Schema Registry](https://docs.localstack.cloud/user-guide/aws/glue/) is supported by LocalStack Pro as well, ultimately allowing you to test the evolution of your data streaming application completely on your local machine. It allows you develop and test your application's data schema evolution locally. The code for this tutorial (including a script to execute it step-by-step) can be found in our [LocalStack Pro samples over GitHub](https://github.com/localstack/localstack-pro-samples/tree/master/glue-msk-schema-registry).
# Prerequisites
@@ -54,7 +54,7 @@ For this tutorial you will need:
- [LocalStack Pro](https://localstack.cloud/pricing/) to emulate Amazon MSK and AWS Glue Schema Registry locally
- Don't worry, if you don't have a subscription yet, you can just get a trial license for free.
-- [awslocal](https://docs.localstack.cloud/integrations/aws-cli/#localstack-aws-cli-awslocal)
+- [awslocal]({{< ref "aws-cli#localstack-aws-cli-awslocal" >}})
- Java 11+
- Maven 3
@@ -481,7 +481,7 @@ public void startConsumer() {
Now that the initial coding is done, we can give it a try. Let's start LocalStack:
```bash
-LOCALSTACK_API_KEY= localstack start -d
+LOCALSTACK_AUTH_TOKEN= localstack start -d
```
Once LocalStack is started, we can create a new Kafka cluster using `awslocal`:
diff --git a/content/en/user-guide/ci/_index.md b/content/en/user-guide/ci/_index.md
index 02feb6a647..580a407ebf 100644
--- a/content/en/user-guide/ci/_index.md
+++ b/content/en/user-guide/ci/_index.md
@@ -11,9 +11,9 @@ aliases:
- /ci/
---
-LocalStack enables organizations to automate their application testing and integration process through DevOps practices, such as continuous integration (CI). To meet your organizational needs, LocalStack lets you move away from complicated AWS testing and staging environments by enabling a key component of testing and delivering cloud-native applications.
+LocalStack enables organizations to automate their application testing and integration process through DevOps practices, such as continuous integration (CI). To meet your organizational needs, LocalStack lets you move away from complicated AWS testing and staging environments by enabling a key component of testing and delivering cloud-native applications.
-You can easily integrate LocalStack with your existing CI platform. We provide native plugins for CircleCI and a generic driver for any other CI platform you might use. This enables you to incorporate LocalStack's local AWS cloud emulation in your CI pipelines, use advanced features like Cloud Pods and CI analytics, and run your test & integration suite before pushing to production.
+You can easily integrate LocalStack with your existing CI platform. We provide native plugins for CircleCI and a generic driver for any other CI platform you might use. This enables you to incorporate LocalStack's local AWS cloud emulation in your CI pipelines, use advanced features like Cloud Pods and CI analytics, and run your test & integration suite before pushing to production.
## Hypothetical CI workflow
@@ -21,19 +21,19 @@ Let's assume that your team has an automated CI workflow into which you want to
{{< figure src="localstack-in-ci.svg" alt="An example CI/CD workflow using LocalStack" width="90%">}}
-The CI build is triggered by pushing code to a version control repository, like GitHub. The CI runner starts LocalStack and executes the test suite. You can also use the same Infrastructure-as-Code (IaC) configuration that you use to set up AWS in your production environment to set up LocalStack in the CI environment. You can also pre-seed state into the local AWS services (e.g., DynamoDB entries or S3 files) provided by LocalStack in your CI environment via [Cloud Pods](https://docs.localstack.cloud/tools/cloud-pods/).
+The CI build is triggered by pushing code to a version control repository, like GitHub. The CI runner starts LocalStack and executes the test suite. You can also use the same Infrastructure-as-Code (IaC) configuration that you use to set up AWS in your production environment to set up LocalStack in the CI environment. You can also pre-seed state into the local AWS services (e.g., DynamoDB entries or S3 files) provided by LocalStack in your CI environment via [Cloud Pods]({{< ref "user-guide/tools/cloud-pods" >}}).
After a successful test run, you can execute the more expensive AWS CodeBuild pipeline for deploying your application. You can enrich the test reports created by your testing framework with traces and analytics generated inside LocalStack.
## CI Credits
-A _CI key_ is a special type of API key that allows you to use LocalStack in your CI environment. Each key activation, i.e., each single startup of the LocalStack container in your CI environment, consumes one build credit. LocalStack Pro offers a CI key with a limited number of build credits to help you start experimenting with larger CI settings. LocalStack Team is focused on using LocalStack on individual user machines, across teams, and in larger CI settings to help teams collaborate and use LocalStack extensively in CI.
+A _CI key_ is a special type of API key that allows you to use LocalStack in your CI environment. Each key activation, i.e., each single startup of the LocalStack container in your CI environment, consumes one build credit. LocalStack Pro offers a limited number of build credits to help you start experimenting with larger CI settings. LocalStack Team is focused on using LocalStack on individual user machines, across teams, and in larger CI settings to help teams collaborate and use LocalStack extensively in CI.
-The Pro subscription is mainly intended for use on individual user machines. We recommend our Team plan if you intend to use LocalStack extensively for team collaboration and in CI environments. For the CI environment, each subscription (both Pro and Team) comes with one extra CI key (included in the subscription at no extra charge), which allows you to use LocalStack in your CI environment. The CI key has a certain number of credits, depending on the number of individual user seats and the plan you have purchased.
+The Pro subscription is mainly intended for use on individual user machines. We recommend our Team plan if you intend to use LocalStack extensively for team collaboration and in CI environments.
## CI integrations
-The steps required for the integration differ slightly depending on your preferred CI platform. Please refer to the relevant sections below for detailed instructions on the integration process. To follow the instructions, you can first retrieve the CI key from the [Account settings page](https://app.localstack.cloud/account/apikeys) in the [LocalStack Web app](https://app.localstack.cloud).
+The steps required for the integration differ slightly depending on your preferred CI platform. Please refer to the relevant sections CI keys settings page](https://app.localstack.cloud/workspace/ci-keys) in the [LocalStack Web app](https://app.localstack.cloud).
## CI images
diff --git a/content/en/user-guide/ci/circle-ci/index.md b/content/en/user-guide/ci/circle-ci/index.md
index 7093b4546f..0b8fd08aac 100644
--- a/content/en/user-guide/ci/circle-ci/index.md
+++ b/content/en/user-guide/ci/circle-ci/index.md
@@ -66,7 +66,7 @@ The above CircleCI job does the following:
To enable LocalStack Pro+, you need to add your LocalStack CI API key to the project's environment variables. The LocalStack container will automatically pick it up and activate the licensed features.
-Go to the [API Key Settings](https://app.localstack.cloud/account/apikeys) page and copy your CI key. To add the CI key to your CircleCI project, follow these steps:
+Go to the [CI Key Page](https://app.localstack.cloud/workspace/ci-keys) page and copy your CI key. To add the CI key to your CircleCI project, follow these steps:
- Click on **Project Settings**.
- Select **Environment Variables** from the left side menu.
diff --git a/content/en/user-guide/ci/drone-ci/index.md b/content/en/user-guide/ci/drone-ci/index.md
index c7657bd460..c6ba5609c3 100644
--- a/content/en/user-guide/ci/drone-ci/index.md
+++ b/content/en/user-guide/ci/drone-ci/index.md
@@ -1,6 +1,6 @@
---
title: "Drone CI"
-tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
+tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
weight: 5
description: >
Use LocalStack in [Drone CI](https://drone.io/)
@@ -40,9 +40,9 @@ steps:
- until curl -s http://localstack:4566/_localstack/health; do echo -n . && sleep 1; done
```
-## Configuring an API key
+## Configuring a CI key
-You can easily enable LocalStack Pro by by using the `localstack/localstack-pro` image and adding your API key to Drone Repository secrets. You can manage them from your repository settings screen. Navigate to your Repository secrets on your Drone repository and add the LocalStack API key as `localstack_api_key`. Here is an example:
+You can easily enable LocalStack Pro by by using the `localstack/localstack-pro` image and adding your API key to Drone Repository secrets. You can manage them from your repository settings screen. Navigate to your Repository secrets on your Drone repository and add the LocalStack CI key as `localstack_ci_key`. Here is an example:
```yml
services:
@@ -50,5 +50,5 @@ services:
image: localstack/localstack-pro
environment:
LOCALSTACK_API_KEY:
- from_secret: localstack_api_key
+ from_secret: localstack_ci_key
```
diff --git a/content/en/user-guide/ci/github-actions/index.md b/content/en/user-guide/ci/github-actions/index.md
index 31e34402fa..18b3adbec2 100644
--- a/content/en/user-guide/ci/github-actions/index.md
+++ b/content/en/user-guide/ci/github-actions/index.md
@@ -1,6 +1,6 @@
---
title: "GitHub Actions"
-tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
+tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
weight: 5
description: >
Use LocalStack in [GitHub Actions](https://github.com/features/actions)
@@ -37,9 +37,9 @@ jobs:
pip install localstack awscli-local[ver1] # install LocalStack cli and awslocal
docker pull localstack/localstack # Make sure to pull the latest version of the image
localstack start -d # Start LocalStack in the background
-
+
echo "Waiting for LocalStack startup..." # Wait 30 seconds for the LocalStack container
- localstack wait -t 30 # to become ready before timing out
+ localstack wait -t 30 # to become ready before timing out
echo "Startup complete"
- name: Run some Tests against LocalStack
run: |
@@ -50,9 +50,9 @@ jobs:
If you want to add further configuration for LocalStack, you can use the `env` section of your build step to set the configuration variables as described [here][2].
-## Configuring an API key
+## Configuring a CI key
-You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your API key as a [Github Encrypted Secret][3] to store your API key securely. You can set the `LOCALSTACK_API_KEY` environment variable to the value of the secret `LOCALSTACK_API_KEY`. You can set your secret at an environment, repository or organization level. Navigate to your repository **Settings**, click **Secrets**, and press **New Repository Secret**. Here is an example:
+You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your CI key as a [Github Encrypted Secret][3] to store your CI key securely. You can set the `LOCALSTACK_API_KEY` environment variable to the value of the secret `LOCALSTACK_API_KEY`. You can set your secret at an environment, repository or organization level. Navigate to your repository **Settings**, click **Secrets**, and press **New Repository Secret**. Here is an example:
```yaml
- name: Start LocalStack
@@ -62,13 +62,13 @@ You can easily enable LocalStack Pro by using the `localstack/localstack-pro` im
pip install localstack awscli-local[ver1] # install LocalStack cli and awslocal
docker pull localstack/localstack-pro # Make sure to pull the latest version of the image
localstack start -d # Start LocalStack in the background
-
+
echo "Waiting for LocalStack startup..." # Wait 30 seconds for the LocalStack container
- localstack wait -t 30 # to become ready before timing out
+ localstack wait -t 30 # to become ready before timing out
echo "Startup complete"
```
-![Adding the LocalStack API key as secret in GitHub](github-create-secret.png)
+![Adding the LocalStack CI key as secret in GitHub](github-create-secret.png)
[1]: https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions#steps "GitHub Action Build Steps"
[2]: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsenv "GitHub Action Steps - Environment variables"
diff --git a/content/en/user-guide/ci/gitlab-ci/index.md b/content/en/user-guide/ci/gitlab-ci/index.md
index 55bd3642ca..b831b0b058 100644
--- a/content/en/user-guide/ci/gitlab-ci/index.md
+++ b/content/en/user-guide/ci/gitlab-ci/index.md
@@ -1,6 +1,6 @@
---
title: "GitLab CI"
-tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
+tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
weight: 7
description: >
Use LocalStack in [GitLab CI](https://docs.gitlab.com/ee/ci/)
@@ -71,9 +71,9 @@ HOSTNAME_EXTERNAL: localhost.localstack.cloud.
While working with a Docker-in-Docker (`dind`) setup, the Docker runner requires `privileged` mode. You must always use `privileged = true` in your GitLab CI's `config.toml` file while setting up LocalStack in GitLab CI runners. For more information, see [GitLab CI Docker-in-Docker](https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-executor) documentation.
{{< /alert >}}
-## Configuring an API key
+## Configuring a CI key
-You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your API key to the repository's environment variables. Go to your project's **Settings > CI/CD** and expand the **Variables** section. Select the **Add Variable** button and fill in the necessary details. After you create a variable, you can use it in the `.gitlab-ci.yml` file.
+You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your CI key to the repository's environment variables. Go to your project's **Settings > CI/CD** and expand the **Variables** section. Select the **Add Variable** button and fill in the necessary details. After you create a variable, you can use it in the `.gitlab-ci.yml` file.
However Variables set in the GitLab UI are not passed down to service containers. We need to assign them to variables in the UI, and then re-assign them in our `.gitlab-ci.yml`:
@@ -94,4 +94,4 @@ test:
...
```
-You can check the logs of the LocalStack container to see if the activation was successful. If the API key activation fails, LocalStack container will exit with an error code.
+You can check the logs of the LocalStack container to see if the activation was successful. If the CI key activation fails, LocalStack container will exit with an error code.
diff --git a/content/en/user-guide/ci/harness-ci/index.md b/content/en/user-guide/ci/harness-ci/index.md
index cc8eb782d0..a7b366b9f1 100644
--- a/content/en/user-guide/ci/harness-ci/index.md
+++ b/content/en/user-guide/ci/harness-ci/index.md
@@ -1,6 +1,6 @@
---
title: "Harness CI"
-tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
+tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
weight: 8
description: >
Use LocalStack in [Harness CI](https://harness.io/products/continuous-integration)
@@ -16,13 +16,13 @@ To get started, create a new pipeline in Harness CI:
- Click **Add Stage**.
- Click **Build** and set a name for the stage.
-- Optionally configure the repository you are looking to be cloned and click on **Set Up Stage**.
+- Optionally configure the repository you are looking to be cloned and click on **Set Up Stage**.
- Select **Cloud** in the **Infrastructure** tab.
- Click **Add Service Dependency** in the **Execution** tab.
- In the **Configure Service Dependency** dialogue box, enter `localstack` as the name of the service dependency.
-- Click **Container Registry** field and select **Docker Hub** connector.
+- Click **Container Registry** field and select **Docker Hub** connector.
- Enter the desired LocalStack Docker image in the **Image** field.
-- Select **Optional Configuration** to add an environment variable named **LOCALSTACK_API_KEY** to have an API key configured.
+- Select **Optional Configuration** to add an environment variable named **LOCALSTACK_API_KEY** to have an CI key configured.
- Click on **Apply Changes**.
## YAML configuration
@@ -57,10 +57,10 @@ stages:
To run the pipeline, click **Save** and then **Run Pipeline**. You will be able to see LocalStack Service Dependency logs that verify that the LocalStack Container is healthy and running.
-## Configuring an API key
+## Configuring a CI key
-You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your API key
-by selecting **Optional Configuration** to add an environment variable named **LOCALSTACK_API_KEY** to have an API key configured. Here is an example:
+You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your CI key
+by selecting **Optional Configuration** to add an environment variable named **LOCALSTACK_API_KEY** to have an CI key configured. Here is an example:
```yaml
serviceDependencies:
@@ -71,5 +71,5 @@ serviceDependencies:
connectorRef: my_connector
image: localstack/localstack-pro
envVariables:
- LOCALSTACK_API_KEY: <+secrets.getValue("localstack-api-key")>
+ LOCALSTACK_API_KEY: <+secrets.getValue("localstack-ci-key")>
```
diff --git a/content/en/user-guide/ci/travis-ci/index.md b/content/en/user-guide/ci/travis-ci/index.md
index 4646c43f6f..a8b0eb57fc 100644
--- a/content/en/user-guide/ci/travis-ci/index.md
+++ b/content/en/user-guide/ci/travis-ci/index.md
@@ -1,6 +1,6 @@
---
title: "Travis CI"
-tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
+tags: ["continuous-integration", "ci", "continuous-delivery", "testing"]
weight: 6
description: >
Use LocalStack in [Travis CI](https://www.travis-ci.com/)
@@ -48,13 +48,13 @@ script:
- echo "Execute your tests here :)"
```
-## Configuring an API key
+## Configuring a CI key
-You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your API key to the project's environment variables. The LocalStack CLI will automatically pick it up and activate the Pro features.
+You can easily enable LocalStack Pro by using the `localstack/localstack-pro` image and adding your CI key to the project's environment variables. The LocalStack CLI will automatically pick it up and activate the Pro features.
-Just go to the project settings in Travis CI (`More options` → `Settings`), scroll down to the `Environment Variables` section, and add your API key:
+Just go to the project settings in Travis CI (`More options` → `Settings`), scroll down to the `Environment Variables` section, and add your CI key:
-![Adding the LocalStack API key in Travis CI](travis-ci-env-config.png)
+![Adding the LocalStack CI key in Travis CI](travis-ci-env-config.png)
Here is an example:
diff --git a/content/en/user-guide/extensions/developing-extensions/index.md b/content/en/user-guide/extensions/developing-extensions/index.md
index 5cd9502311..a11835fdc9 100644
--- a/content/en/user-guide/extensions/developing-extensions/index.md
+++ b/content/en/user-guide/extensions/developing-extensions/index.md
@@ -106,7 +106,7 @@ class ReadyAnnouncerExtension(Extension):
A note on importing LocalStack modules: since extensions run in the same Python process as the LocalStack runtime,
you can also import other LocalStack modules outside the `localstack.extensions.api` module, and work with them.
However, be aware that these modules are not part of our public API, and can change even with patch versions any time.
-Your extension may break in unexpected ways, and we cannot provide support for internal APIs.
+Your extension may break in unexpected ways, and we cannot provide support for internal APIs.
{{}}
### Packaging extensions
@@ -212,7 +212,7 @@ $ localstack extensions dev enable ./my-localstack-extension
Then, start LocalStack with `EXTENSION_DEV_MODE=1`
{{< command >}}
-$ EXTENSION_DEV_MODE=1 LOCALSTACK_API_KEY=... localstack start
+$ EXTENSION_DEV_MODE=1 LOCALSTACK_AUTH_TOKEN=... localstack start
{{< / command >}}
In the LocalStack logs you should then see something like:
diff --git a/content/en/user-guide/extensions/managing-extensions/index.md b/content/en/user-guide/extensions/managing-extensions/index.md
index c5733dfebb..96e94a2343 100644
--- a/content/en/user-guide/extensions/managing-extensions/index.md
+++ b/content/en/user-guide/extensions/managing-extensions/index.md
@@ -1,6 +1,6 @@
---
title: "Managing extensions"
-tags: ["extensions"]
+tags: ["extensions"]
weight: 5
description: >
How to manage LocalStack extensions in your LocalStack environment
@@ -99,7 +99,7 @@ services:
- "127.0.0.1:4510-4559:4510-4559"
environment:
- DEBUG=1
- - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY-}
+ - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN-}
- EXTENSION_AUTO_INSTALL=localstack-extension-mailhog,localstack-extension-httpbin
volumes:
- "./volume:/var/lib/localstack"
@@ -130,7 +130,7 @@ An example project could look something like this:
* `docker-compose.yaml`
```yaml
version: "3.8"
-
+
services:
localstack:
...
diff --git a/content/en/user-guide/integrations/kafka/docker-compose.yml b/content/en/user-guide/integrations/kafka/docker-compose.yml
index f6baa13daf..5e11ff2efb 100644
--- a/content/en/user-guide/integrations/kafka/docker-compose.yml
+++ b/content/en/user-guide/integrations/kafka/docker-compose.yml
@@ -61,7 +61,7 @@ services:
environment:
- DEBUG=${DEBUG- }
- PERSISTENCE=${PERSISTENCE- }
- - LOCALSTACK_API_KEY=${LOCALSTACK_API_KEY- }
+ - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN- }
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
diff --git a/content/en/user-guide/tools/cloud-pods/getting-started/index.md b/content/en/user-guide/tools/cloud-pods/getting-started/index.md
index 38422a20e4..78fbbd11fe 100644
--- a/content/en/user-guide/tools/cloud-pods/getting-started/index.md
+++ b/content/en/user-guide/tools/cloud-pods/getting-started/index.md
@@ -12,7 +12,7 @@ Using the LocalStack Cloud Pods command-line interface (CLI) via the `pod` comma
## Installation
-The LocalStack Cloud Pods CLI is included in the [LocalStack CLI installation](https://docs.localstack.cloud/getting-started/installation/#localstack-cli), so there's no need for additional installations to begin using it. If you're a licensed user, we suggest setting the `LOCALSTACK_API_KEY` as an environment variable. This enables you to access the complete range of LocalStack Cloud Pods features.
+The LocalStack Cloud Pods CLI is included in the [LocalStack CLI installation](https://docs.localstack.cloud/getting-started/installation/#localstack-cli), so there's no need for additional installations to begin using it. If you're a licensed user, we suggest setting the `LOCALSTACK_AUTH_TOKEN` as an environment variable. This enables you to access the complete range of LocalStack Cloud Pods features.
You can access the Cloud Pods CLI by running the `pod` command from your terminal.
@@ -56,7 +56,7 @@ $ awslocal s3 ls s3://test/
### Save your Cloud Pod state
You can now your Pod state using the `save` command, specifying the desired Cloud Pod name as the first argument. This action will save the pod and register it with the LocalStack Web Application:
-
+
{{< command >}}
$ localstack pod save s3-test
@@ -110,7 +110,11 @@ $ localstack pod inspect s3-test --format json
### Pull your Pod state
+<<<<<<< HEAD
On a separate machine, start LocalStack while ensuring the API key is properly configured. Then, retrieve the previously created Cloud Pod by employing the `load` command, specifying the Cloud Pod name as the first argument:
+=======
+ On a separate machine, start LocalStack while ensuring the auth token is properly configured. Then, retrieve the previously created Cloud Pod by employing the `load` command, specifying the Cloud Pod name as the first argument:
+>>>>>>> 8b966bb74 (updated API key to auth token, fixed web app links)
{{< command >}}
$ localstack pod load s3-test
diff --git a/content/en/user-guide/web-application/_index.md b/content/en/user-guide/web-application/_index.md
index d74cf213db..e777cc2ebf 100644
--- a/content/en/user-guide/web-application/_index.md
+++ b/content/en/user-guide/web-application/_index.md
@@ -3,9 +3,9 @@ title: "LocalStack Web Application"
linkTitle: "LocalStack Web Application"
weight: 50
description: >
- You can use the LocalStack Web Application to view and manage all aspects of the LocalStack platform
+ The LocalStack web app allows you to access additional features of LocalStack as well as to manage subscription and licenses, workspace members and permissions.
cascade:
type: docs
---
-[LocalStack Web Application](https://app.localstack.cloud/) is a web-based user interface that allows you to manage your LocalStack account and all aspects of the LocalStack platform, which includes your API & CI keys, Stack Insights, Cloud Pods, and CI analytics.
+[LocalStack Web Application](https://app.localstack.cloud/) is a web-based user interface that allows you to manage your LocalStack account and all aspects of the LocalStack platform, including licenses and subscription, and additional features like the resource browser, extensions, Stack Insights, Cloud Pods, CI analytics and more.
diff --git a/content/en/user-guide/web-application/accounts/account.png b/content/en/user-guide/web-application/accounts/account.png
new file mode 100644
index 0000000000000000000000000000000000000000..92d4c78f11cf14c771a5e681c24e9b671fcd9533
GIT binary patch
literal 7681960
zcmeF)31Aat`p5B^G$jR;R*-f9IaDr1z`t_13MdL9tAZkUpQxyKth!z(o~U@Nx{83h
zhzf#$$RVK1p`aWpmvX5T5Ga=|hb?DA)8zlWGs$$Crlm)EB>84*I+@J8^S+)EYq-zRj-~&cfXa~Pm]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