From 432fa75c30aa17257114e89f375779234abdc93a Mon Sep 17 00:00:00 2001 From: tinyg210 Date: Fri, 20 Oct 2023 08:12:23 +0000 Subject: [PATCH] deploy: 11bda9423333b0941305710de042abbf81172558 --- categories/localstack-pro/index.html | 2 +- categories/localstack-pro/index.xml | 258 +++++++++++++++++++++++++-- sitemap.xml | 2 +- user-guide/aws/index.xml | 258 +++++++++++++++++++++++++-- user-guide/aws/qldb/index.html | 202 +++++++++++++++++++-- 5 files changed, 676 insertions(+), 46 deletions(-) diff --git a/categories/localstack-pro/index.html b/categories/localstack-pro/index.html index 70c9a8e7f5..0f510b37b1 100644 --- a/categories/localstack-pro/index.html +++ b/categories/localstack-pro/index.html @@ -1,7 +1,7 @@ LocalStack Pro | Docs

Category: LocalStack Pro

All Categories
+| docs

Category: LocalStack Pro

All Categories
\ No newline at end of file diff --git a/categories/localstack-pro/index.xml b/categories/localstack-pro/index.xml index 3b1b1eee92..2c55a01b78 100644 --- a/categories/localstack-pro/index.xml +++ b/categories/localstack-pro/index.xml @@ -3773,21 +3773,249 @@ The certificate is signed by the LocalStack root CA.</p> <p>It is also possible to use advanced features like SQL queries for IoT topic rules.</p> <p>For example, you can use the <a href="https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html"><code>CreateTopicRule</code></a> operation to define a topic rule with a SQL query <code>SELECT * FROM 'my/topic' where attr=123</code> which will execute a trigger whenever a message with attribute <code>attr=123</code> is received on the MQTT topic <code>my/topic</code>.</p> <p>Supported triggers include Kinesis, Lambda, SQS, Firehose and DynamoDB v2.</p>User-Guide: Quantum Ledger Database (QLDB)/user-guide/aws/qldb/Mon, 01 Jan 0001 00:00:00 +0000/user-guide/aws/qldb/ -<p>The Quantum Ledger Database (QLDB) API supports queries over cryptographically verifiable data, stored in a journal of immutable transaction events. LocalStack allows to create local ledgers and journals, to perform <code>CREATE TABLE</code> statements, to insert data via <code>INSERT</code> statements, and to query data via <code>SELECT</code> statements.</p> -<p>QLDB uses the <a href="https://amzn.github.io/ion-docs">Amazon ION data format</a>, a data serialization format that represents a superset of JSON, with a number of additional features.</p> -<p>A simple QLDB example running on LocalStack is provided in <a href="https://github.com/localstack/localstack-pro-samples/tree/master/qldb-ledger-queries">this Github repository</a>. The sample consists of two simple scenarios: (1) to create and list tables via the <code>pyqldb</code> Python library, and (2) to insert data into two tables and perform a <code>JOIN</code> query that combines data from the two tables. The sample output is posted below:</p> -<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plaintext" data-lang="plaintext"><span style="display:flex;"><span>Scenario 1: create and list tables in ledger -</span></span><span style="display:flex;"><span>----------- -</span></span><span style="display:flex;"><span>Creating new test ledger in QLDB API: ledger-test-1 -</span></span><span style="display:flex;"><span>Creating two test tables in ledger -</span></span><span style="display:flex;"><span>Retrieved list of tables in ledger ledger-test-1: [&#39;foobar1&#39;, &#39;foobar2&#39;] -</span></span><span style="display:flex;"><span>----------- -</span></span><span style="display:flex;"><span>Scenario 2: create ledger tables and run join query -</span></span><span style="display:flex;"><span>----------- -</span></span><span style="display:flex;"><span>Creating two test tables in ledger - &#34;Vehicle&#34; and &#34;VehicleRegistration&#34; -</span></span><span style="display:flex;"><span>Running a query that joins data from the two tables -</span></span><span style="display:flex;"><span>Query result: [{&#39;Vehicle&#39;: {&#39;id&#39;: &#39;v1&#39;}}, {&#39;Vehicle&#39;: {&#39;id&#39;: &#39;v2&#39;}}, {&#39;Vehicle&#39;: {&#39;id&#39;: &#39;v3&#39;}}] -</span></span></code></pre></div>User-Guide: Transfer/user-guide/aws/transfer/Mon, 01 Jan 0001 00:00:00 +0000/user-guide/aws/transfer/ +<h2 id="introduction">Introduction</h2> +<p>Quantum Ledger Database (QLDB) is supported by LocalStack only in the Pro version.</p> +<p>Amazon Quantum Ledger Database is a fully managed ledger database service offered by Amazon Web +Services. It is designed to provide transparent, immutable, and cryptographically verifiable +transaction +log functionality to applications. QLDB is particularly useful for applications that need a secure +and scalable +way to maintain a complete and verifiable history of data changes over time.</p> +<p>To learn more about QLDB please refer to +the <a href="https://docs.aws.amazon.com/qldb/">official documentation</a>. +To find out what operations are supported by the QLDB service on LocalStack, please check +the <a href="/references/coverage/coverage_qldb/" title="QLDB +service coverage page">QLDB service coverage page</a>.</p> +<h2 id="getting-started">Getting started</h2> +<p>These instructions will follow along with +the <a href="https://docs.aws.amazon.com/qldb/latest/developerguide/getting-started.html">getting started guide</a> +from the official documentation, but instead of using the console to +perform all the operations, the LocalStack AWS CLI (management API only) and the QLDB shell (data +API only) will be used.</p> +<h3 id="installing-the-qldb-shell">Installing the QLDB shell</h3> +<p>QLDB supports PartiQL, a SQL-compatible query language, which allows you to query and manipulate +data stored in QLDB. +You can write PartiQL statements to perform complex queries, aggregations, and transformations on +your data. +Amazon QLDB provides a command line shell for interaction with the transactional data API. With the +QLDB shell, +you can run PartiQL statements on ledger data.</p> +<p>For instructions on how to use and install the latest version of the QLDB shell, see +the <a href="https://github.com/awslabs/amazon-qldb-shell/blob/main/README.md#installation">README.md</a> file +on GitHub. +QLDB provides pre-built binary files for Linux, macOS, and Windows in +the <a href="https://github.com/awslabs/amazon-qldb-shell/releases">Releases</a> section of the repository.</p> +<h3 id="creating-a-new-ledger">Creating a new ledger</h3> +<p>QLDB provides ledger databases, which are centralized, immutable, and cryptographically verifiable +journals of transactions.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>awslocal qldb create-ledger --name vehicle-registration --permissions-mode ALLOW_ALL</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Name&#34;</span>: <span style="color:#4e9a06">&#34;vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Arn&#34;</span>: <span style="color:#4e9a06">&#34;arn:aws:qldb:us-east-1:000000000000:ledger/vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;State&#34;</span>: <span style="color:#4e9a06">&#34;ACTIVE&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;CreationDateTime&#34;</span>: 1696782718.0, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;PermissionsMode&#34;</span>: <span style="color:#4e9a06">&#34;ALLOW_ALL&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;DeletionProtection&#34;</span>: <span style="color:#204a87">true</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span></code></pre></div> +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">Note</h4> +<ul> +<li>Permissions mode – the following options are available in AWS:</li> +</ul> +<p><strong>Allow all</strong> – A legacy permissions mode that enables access control with API-level granularity for +ledgers. +This mode disregards any table-level or command-level IAM permissions policies that you create for +the ledger.</p> +<p><strong>Standard</strong> (Recommended) - A permissions mode that enables access control with finer granularity +for ledgers, +tables, and PartiQL commands. It is recommended using this permissions mode to maximize the security +of your +ledger data. +By default, this mode denies all requests to run any PartiQL commands on any tables in this ledger. +To allow PartiQL +commands, you must create IAM permissions policies for specific table resources and PartiQL actions, +in addition to +the <code>SendCommand</code> API permission for the ledger.</p> +</div> +<p>The following command can be used directly to write PartiQL statements against a QLDB ledger:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>qldb --qldb-session-endpoint http://localhost:4566 --ledger vehicle-registration</span></span></code></pre></div> +<p>The user can continue from here to create tables, populate and interrogate them.</p> +<h3 id="creating-tables-and-sample-data">Creating tables and sample data</h3> +<p>PartiQL is a query language designed for processing structured data, allowing you to perform +various data manipulation tasks using familiar SQL-like syntax.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; CREATE TABLE VehicleRegistration</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> information_schema: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> user_tables: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> name: <span style="color:#4e9a06">&#34;VehicleRegistration&#34;</span>, +</span></span><span style="display:flex;"><span> status: <span style="color:#4e9a06">&#34;ACTIVE&#34;</span>, +</span></span><span style="display:flex;"><span> indexes: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> Vehicle: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span>, +</span></span><span style="display:flex;"><span> VehicleRegistration: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 31ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><p>The <code>VehicleRegistration</code> table was created. Now it&rsquo;s time to add some items:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; INSERT INTO VehicleRegistration VALUE +</span></span><span style="display:flex;"><span>{ +</span></span><span style="display:flex;"><span> &#39;VIN&#39; : &#39;KM8SRDHF6EU074761&#39;, +</span></span><span style="display:flex;"><span> &#39;RegNum&#39; : 1722, +</span></span><span style="display:flex;"><span> &#39;State&#39; : &#39;WA&#39;, +</span></span><span style="display:flex;"><span> &#39;City&#39; : &#39;Kent&#39;, +</span></span><span style="display:flex;"><span> &#39;PendingPenaltyTicketAmount&#39; : 130.75, +</span></span><span style="display:flex;"><span> &#39;Owners&#39; : { +</span></span><span style="display:flex;"><span> &#39;PrimaryOwner&#39; : { &#39;PersonId&#39;: &#39;294jJ3YUoH1IEEm8GSabOs&#39; }, +</span></span><span style="display:flex;"><span> &#39;SecondaryOwners&#39; : [ +</span></span><span style="display:flex;"><span> { &#39;PersonId&#39; : &#39;1nmeDdLo3AhGswBtyM1eYh&#39; }, +</span></span><span style="display:flex;"><span> { &#39;PersonId&#39;: &#39;IN7MvYtUjkp1GMZu0F6CG9&#39; } +</span></span><span style="display:flex;"><span> ] +</span></span><span style="display:flex;"><span> }, +</span></span><span style="display:flex;"><span> &#39;ValidFromDate&#39; : `2017-09-14T`, +</span></span><span style="display:flex;"><span> &#39;ValidToDate&#39; : `2020-06-25T` +</span></span><span style="display:flex;"><span>}</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span>documentId: <span style="color:#4e9a06">&#34;3TYR9BamzyqHWBjYOfHegE&#34;</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 894ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="querying-a-table">Querying a table</h3> +<p>The table can be interrogated based on the inserted registration number:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT * FROM VehicleRegistration WHERE RegNum=1722</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;VIN&#39;</span> : <span style="color:#4e9a06">&#39;KM8SRDHF6EU074761&#39;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;RegNum&#39;</span> : 1722, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;State&#39;</span> : <span style="color:#4e9a06">&#39;WA&#39;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;City&#39;</span> : <span style="color:#4e9a06">&#39;Kent&#39;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;PendingPenaltyTicketAmount&#39;</span> : 130.75, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;Owners&#39;</span> : <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;PrimaryOwner&#39;</span> : <span style="color:#ce5c00;font-weight:bold">{</span> <span style="color:#4e9a06">&#39;PersonId&#39;</span>: <span style="color:#4e9a06">&#39;294jJ3YUoH1IEEm8GSabOs&#39;</span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;SecondaryOwners&#39;</span> : <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> <span style="color:#4e9a06">&#39;PersonId&#39;</span> : <span style="color:#4e9a06">&#39;1nmeDdLo3AhGswBtyM1eYh&#39;</span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> <span style="color:#4e9a06">&#39;PersonId&#39;</span>: <span style="color:#4e9a06">&#39;IN7MvYtUjkp1GMZu0F6CG9&#39;</span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;ValidFromDate&#39;</span> : <span style="color:#4e9a06">`</span>2017-09-14T<span style="color:#4e9a06">`</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;ValidToDate&#39;</span> : <span style="color:#4e9a06">`</span>2020-06-25T<span style="color:#4e9a06">`</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 477ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="modifying-documents-in-a-ledger">Modifying documents in a ledger</h3> +<p>Additional changes can be made to documents in the <code>vehicle-registration</code> ledger with more complex +queries. +Supposed the vehicle is sold and changes owners, this information needs to be updated with a new +person ID.</p> +<p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; UPDATE VehicleRegistration AS r SET r.Owners.PrimaryOwner.PersonId = &#39;112233445566NO&#39; WHERE r.VIN = &#39;KM8SRDHF6EU074761&#39;</span></span></code></pre></div> +The command will return the updated document ID.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> documentId: <span style="color:#4e9a06">&#34;3TYR9BamzyqHWBjYOfHegE&#34;</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 62ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><p>The next step is to check on the updates made to the <code>PersonId</code> field of the <code>PrimaryOwner</code>: +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT r.Owners FROM VehicleRegistration AS r WHERE r.VIN = &#39;KM8SRDHF6EU074761&#39;</span></span></code></pre></div> +</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> Owners: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PrimaryOwner: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;112233445566NO&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> SecondaryOwners: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;1nmeDdLo3AhGswBtyM1eYh&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;IN7MvYtUjkp1GMZu0F6CG9&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 518ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="viewing-the-revision-history-of-a-document">Viewing the revision history of a document</h3> +<p>After modifying the data in a document, the user can query the history of the entity. +You can see all revisions of a document that you inserted, updated, and deleted by querying the +built-in History function. +First the unique <code>id</code> of the document must be found.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT r_id FROM VehicleRegistration AS r BY r_id WHERE r.VIN = &#39;KM8SRDHF6EU074761&#39;</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span>r_id: <span style="color:#4e9a06">&#34;3TYR9BamzyqHWBjYOfHegE&#34;</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 541ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><p>Then, the <code>id</code> is used to query the history function.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT h.data.VIN, h.data.City, h.data.Owners FROM history(VehicleRegistration) AS h WHERE h.metadata.id = &#39;3TYR9BamzyqHWBjYOfHegE&#39;</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> VIN: <span style="color:#4e9a06">&#34;KM8SRDHF6EU074761&#34;</span>, +</span></span><span style="display:flex;"><span> City: <span style="color:#4e9a06">&#34;Kent&#34;</span>, +</span></span><span style="display:flex;"><span> Owners: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PrimaryOwner: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;294jJ3YUoH1IEEm8GSabOs&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> SecondaryOwners: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;1nmeDdLo3AhGswBtyM1eYh&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;IN7MvYtUjkp1GMZu0F6CG9&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> VIN: <span style="color:#4e9a06">&#34;KM8SRDHF6EU074761&#34;</span>, +</span></span><span style="display:flex;"><span> City: <span style="color:#4e9a06">&#34;Kent&#34;</span>, +</span></span><span style="display:flex;"><span> Owners: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PrimaryOwner: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;112233445566NO&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> SecondaryOwners: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;1nmeDdLo3AhGswBtyM1eYh&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;IN7MvYtUjkp1GMZu0F6CG9&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">2</span> documents in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 544ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="cleaning-up-resources">Cleaning up resources</h3> +<p>Unused ledgers can be deleted. You&rsquo;ll notice that directly running the following command will lead +to an error message.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>awslocal qldb delete-ledger --name vehicle-registration</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>An error occurred <span style="color:#ce5c00;font-weight:bold">(</span>ResourcePreconditionNotMetException<span style="color:#ce5c00;font-weight:bold">)</span> when calling the DeleteLedger operation: Preventing deletion +</span></span><span style="display:flex;"><span>of ledger vehicle-registration with DeletionProtection enabled +</span></span></code></pre></div><p>This can be adjusted using the <code>update-ledger</code> command in the AWS CLI to remove the deletion protection of the ledger:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>awslocal qldb update-ledger --name vehicle-registration --no-deletion-protection</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Name&#34;</span>: <span style="color:#4e9a06">&#34;vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Arn&#34;</span>: <span style="color:#4e9a06">&#34;arn:aws:qldb:us-east-1:000000000000:ledger/vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;State&#34;</span>: <span style="color:#4e9a06">&#34;ACTIVE&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;CreationDateTime&#34;</span>: 1697038061.0, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;DeletionProtection&#34;</span>: <span style="color:#204a87">false</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span></code></pre></div><p>Now the <code>delete-ledger</code> command can be repeated without errors.</p> +<h3 id="examples">Examples</h3> +<p>Interacting with Amazon QLDB (Quantum Ledger Database) is typically done using language-specific +software +development kits (SDKs) provided by AWS. These SDKs make it easier for developers to interact with +QLDB and +perform operations such as managing ledgers, executing PartiQL queries, and processing the results. +When interacting with QLDB, it&rsquo;s common to use a combination of SDKs and PartiQL queries to achieve +specific data +processing tasks, ensuring flexibility and ease of development.</p> +<p>A simple QLDB example running on LocalStack is provided +in <a href="https://github.com/localstack/localstack-pro-samples/tree/master/qldb-ledger-queries">this Github repository</a> +. +The sample consists of two simple scenarios:</p> +<ol> +<li>Create and list tables via the <code>pyqldb</code> Python library.</li> +<li>Insert data into two tables and perform a <code>JOIN</code> query that combines data from the two tables.</li> +</ol>User-Guide: Transfer/user-guide/aws/transfer/Mon, 01 Jan 0001 00:00:00 +0000/user-guide/aws/transfer/ <h2 id="introduction">Introduction</h2> <p>The AWS Transfer API is a powerful tool that empowers users to establish FTP(S) servers with ease. These servers serve as gateways, allowing direct access to files residing in Amazon S3 buckets. diff --git a/sitemap.xml b/sitemap.xml index 492e88ebb2..8bcb22025b 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -/user-guide/aws/feature-coverage/2023-09-18T08:38:19+02:00/references/network-troubleshooting/endpoint-url/2023-09-29T12:57:11+01:00/academy/localstack-101/course-overview/2023-08-23T14:33:03+05:00/user-guide/aws/2022-12-01T14:30:06+05:30/references/network-troubleshooting/2023-05-19T17:05:51+05:30/developer-hub/2023-03-30T17:05:01+02:00/overview/2023-08-17T22:23:40+05:30/tutorials/schema-evolution-glue-msk/2023-08-17T22:23:40+05:30/user-guide/web-application/accounts/2023-08-17T22:23:40+05:30/user-guide/integrations/aws-cli/2023-10-16T20:33:16+05:30/tutorials/lambda-ecr-container-images/2023-08-17T22:23:40+05:30/getting-started/2023-08-17T22:23:40+05:30/user-guide/integrations/2022-12-01T14:30:06+05:30/user-guide/web-application/teams/2023-04-17T16:22:53+05:30/references/network-troubleshooting/transparent-endpoint-injection/2023-09-29T12:57:11+01:00/academy/localstack-101/what-is-localstack/2023-08-23T14:33:03+05:00/references/network-troubleshooting/created-resources/2023-09-29T12:57:11+01:00/tutorials/java-notification-app/2023-08-17T22:54:42+05:30/contributing/contributing/2022-12-01T14:30:06+05:30/user-guide/extensions/2023-10-12T09:22:38+02:00/user-guide/tools/cloud-pods/getting-started/2023-10-17T12:06:17+05:30/user-guide/ci/2023-04-27T14:09:45+05:30/user-guide/extensions/quickstart/2023-10-12T09:22:38+02:00/tutorials/elb-load-balancing/2023-08-17T22:23:40+05:30/user-guide/web-application/stack-insights/2023-02-20T23:11:36+01:00/academy/localstack-101/why-localstack/2023-08-23T14:33:03+05:00/user-guide/ci/circle-ci/2023-04-27T14:09:45+05:30/user-guide/tools/cloud-pods/pods-cli/2023-10-17T12:06:17+05:30/contributing/development-environment-setup/2023-09-26T13:38:02+02:00/academy/localstack-101/getting-started/2023-08-23T14:33:03+05:00/tutorials/s3-static-website-terraform/2023-08-17T22:23:40+05:30/user-guide/web-application/resource-browser/2023-04-24T21:27:46+05:30/user-guide/integrations/serverless-framework/2023-03-27T16:55:20+02:00/user-guide/integrations/testcontainers/2023-06-23T00:43:59-06:00/user-guide/integrations/spring-cloud-function/2023-03-27T16:55:20+02:00/user-guide/tools/lambda-tools/hot-reloading/2023-09-16T14:23:55+02:00/user-guide/integrations/architect/2022-12-01T14:30:06+05:30/user-guide/integrations/copilot/2022-12-01T14:30:06+05:30/user-guide/web-application/cloud-pods-browser/2023-04-24T21:27:46+05:30/tutorials/reproducible-machine-learning-cloud-pods/2023-08-17T22:23:40+05:30/user-guide/integrations/crossplane/2023-09-06T08:59:00+02:00/user-guide/ci/drone-ci/2023-04-27T14:09:45+05:30/user-guide/web-application/extensions-library/2023-10-03T12:28:46-07:00/user-guide/ci/github-actions/2023-04-27T14:09:45+05:30/references/lambda-provider-v2/2023-05-08T14:00:03+00:00/references/coverage/2023-05-19T17:05:51+05:30/user-guide/tools/testing-tools/2022-12-01T14:30:06+05:30/user-guide/extensions/managing-extensions/2023-10-12T09:22:38+02:00/user-guide/tools/lambda-tools/debugging/2023-09-16T14:23:55+02:00/user-guide/tools/cloud-pods/remotes/2023-10-17T12:06:17+05:30/user-guide/web-application/single-sign-on/azure-ad/2023-03-02T21:22:50+05:30/user-guide/integrations/terraform/2023-10-16T20:59:13+05:30/academy/localstack-101/web-app-resource-browser/2023-08-23T14:33:03+05:00/user-guide/tools/cockpit/2023-04-03T16:21:02+01:00/tutorials/ecs-ecr-container-app/2023-08-17T22:54:42+05:30/user-guide/tools/transparent-endpoint-injection/dns-server/2023-09-29T12:57:11+01:00/user-guide/web-application/export-import-state/2023-10-10T02:16:00+05:30/academy/localstack-101/full-project-demo/2023-08-23T14:33:03+05:00/academy/localstack-101/2023-08-23T14:33:03+05:00/contributing/concepts/2022-12-29T12:19:43+01:00/user-guide/tools/transparent-endpoint-injection/patched-sdks/2023-05-04T17:56:26+05:30/user-guide/ci/travis-ci/2023-04-27T14:09:45+05:30/user-guide/integrations/aws-sam/2022-12-01T14:30:06+05:30/academy/localstack-101/cloud-pods/2023-08-23T14:33:03+05:00/user-guide/web-application/custom-local-endpoint/custom-local-endpoint/2023-10-10T02:16:00+05:30/user-guide/ci/gitlab-ci/2023-05-04T11:45:00+05:30/contributing/integration-tests/2023-10-12T10:43:09+02:00/user-guide/tools/localsurf/2023-03-14T14:32:31+05:30/contributing/parity-testing/2023-02-03T15:18:39+05:30/user-guide/2022-12-01T14:30:06+05:30/user-guide/integrations/aws-cdk/2023-06-23T12:19:51+05:30/user-guide/ci/harness-ci/2023-04-27T14:09:45+05:30/user-guide/tools/localstack-docker-extension/2023-01-13T18:45:43+05:30/user-guide/web-application/single-sign-on/2023-10-10T02:16:00+05:30/user-guide/tools/lambda-tools/lambda-vscode-extension/2023-10-16T15:48:01+05:30/user-guide/tools/cloud-pods/2023-10-17T12:06:17+05:30/references/configuration/2023-10-11T16:58:45+02:00/user-guide/extensions/developing-extensions/2023-10-12T09:22:38+02:00/getting-started/installation/2023-09-29T12:57:11+01:00/user-guide/tools/lambda-tools/2022-12-01T14:30:06+05:30/user-guide/tools/cloud-pods/launchpad/2023-10-17T12:06:17+05:30/user-guide/integrations/pulumi/2023-02-03T15:18:39+05:30/contributing/terraform-tests/2022-12-01T14:30:06+05:30/user-guide/tools/transparent-endpoint-injection/2023-03-27T16:55:20+02:00/tutorials/2023-03-30T17:05:01+02:00/user-guide/integrations/cdk-for-terraform/2023-04-23T09:59:36+05:30/user-guide/integrations/kafka/2023-04-23T09:59:36+05:30/user-guide/integrations/chalice/2023-04-23T09:59:36+05:30/user-guide/integrations/gitpod/2023-04-23T09:59:36+05:30/user-guide/integrations/former2/2023-10-15T10:31:51+05:30/user-guide/extensions/official-extensions/2023-10-12T09:22:38+02:00/user-guide/integrations/cloud-custodian/2023-10-18T13:18:40+05:30/getting-started/api-key/2023-09-19T15:32:31+01:00/applications/2023-03-30T17:05:01+02:00/academy/2023-08-23T14:33:03+05:00/getting-started/quickstart/2023-06-23T09:37:24+02:00/getting-started/faq/2023-09-29T12:57:11+01:00/user-guide/tools/2022-12-01T14:30:06+05:30/references/arm64-support/2023-05-19T17:05:51+05:30/references/credentials/2023-05-19T17:05:51+05:30/references/cross-account-access/2023-09-28T12:05:02+05:30/references/custom-tls-certificates/2023-08-02T12:53:03+02:00/references/docker-images/2023-05-19T17:05:51+05:30/references/extensions/2023-10-12T09:22:38+02:00/references/external-ports/2023-09-04T20:13:29+05:30/references/filesystem/2023-05-19T17:05:51+05:30/getting-started/glossary/2023-10-12T09:22:38+02:00/references/init-hooks/2023-09-13T12:33:31+02:00/references/internal-endpoints/2023-05-19T17:05:51+05:30/references/localstack-on-kubernetes/2023-05-19T17:05:51+05:30/user-guide/web-application/2022-12-01T14:30:06+05:30/references/logging/2023-05-19T17:05:51+05:30/references/multi-account-setups/2023-05-25T10:39:37+05:30/references/persistence-mechanism/2023-08-17T22:23:40+05:30/references/podman/2023-05-19T17:05:51+05:30/references/2023-02-03T15:18:39+05:30/references/usage-tracking/2023-05-19T17:05:51+05:30/contributing/2022-12-01T14:30:06+05:30/getting-started/help-and-support/2023-06-23T09:37:24+02:00/user-guide/tools/cloud-pods/community/2023-10-13T09:43:04+05:30/categories/2023-09-29T12:57:11+01:00/tags/dotnet/2023-06-23T00:43:59-06:00/tags/go/2023-06-23T00:43:59-06:00/tags/java/2023-08-17T22:54:42+05:30/tags/jvm/2023-06-23T00:43:59-06:00/tags/kotlin/2023-06-23T00:43:59-06:00/categories/localstack-community/2023-09-16T14:23:55+02:00/categories/localstack-pro/2023-09-29T12:57:11+01:00/tags/2023-10-12T09:22:38+02:00/tags/test/2023-06-23T00:43:59-06:00/tags/testcontainers/2023-06-23T00:43:59-06:00/tags/serverless-framework/2023-08-17T22:23:40+05:30/tags/spring/2023-03-27T16:55:20+02:00/tags/spring-cloud/2023-03-27T16:55:20+02:00/tags/spring-cloud-function/2023-03-27T16:55:20+02:00/applications/temp/2023-03-30T17:05:01+02:00/references/network-troubleshooting/readme/2023-03-17T10:22:16+00:00/user-guide/integrations/sdks/dotnet/2023-09-11T10:43:08+03:00/tags/access-key-id/2023-05-19T17:05:51+05:30/tags/account-id/2023-05-25T10:39:37+05:30/tags/accounts/2023-08-17T22:23:40+05:30/tags/acm/2023-04-28T19:11:32+05:30/references/coverage/coverage_acm/2023-03-20T14:38:19+01:00/user-guide/aws/apigateway/2023-05-11T08:58:11+03:00/applications/amazon-rds-initialization-using-cdk-lambda-ecr-and-secrets-manager/2023-06-28T15:22:44+05:00/tags/amplify/2023-04-27T21:08:52+05:30/references/coverage/coverage_amplify/2023-03-20T14:38:19+01:00/tags/amplify-localstack/2023-04-27T21:08:52+05:30/tags/amplify-plugin/2023-04-27T21:08:52+05:30/tags/amplifylocal/2023-04-27T21:08:52+05:30/tags/apigateway/2023-05-11T08:58:11+03:00/references/coverage/coverage_apigateway/2023-03-20T14:38:19+01:00/tags/apigateway-localstack/2023-05-11T08:58:11+03:00/references/coverage/coverage_apigatewaymanagementapi/2023-03-20T14:38:19+01:00/tags/apigatewayv2/2023-05-11T08:58:11+03:00/references/coverage/coverage_apigatewayv2/2023-03-20T14:38:19+01:00/references/coverage/coverage_appconfig/2023-03-20T14:38:19+01:00/user-guide/aws/appconfig/2023-08-30T15:42:43+05:30/tags/apple/2023-05-19T17:05:51+05:30/user-guide/aws/application-autoscaling/2023-08-31T16:43:39+05:30/references/coverage/coverage_application-autoscaling/2023-03-20T14:38:19+01:00/tags/appsync/2023-06-28T15:22:44+05:00/references/coverage/coverage_appsync/2023-03-20T14:38:19+01:00/user-guide/aws/appsync/2023-09-04T23:45:02+05:30/applications/appsync-graphql-apis-for-dynamodb-and-rds-aurora-postgresql/2023-06-28T15:22:44+05:00/tags/architect/2022-12-01T14:30:06+05:30/references/coverage/coverage_athena/2023-03-20T14:38:19+01:00/user-guide/aws/athena/2023-09-05T13:17:30+05:30/references/coverage/coverage_autoscaling/2023-03-20T14:38:19+01:00/user-guide/aws/amplify/2023-04-27T21:08:52+05:30/user-guide/aws/acm/2023-04-28T19:11:32+05:30/tags/aws-java-sdk/2023-08-17T22:54:42+05:30/user-guide/aws/organization/2022-12-01T14:30:06+05:30/tags/aws-amplify/2023-04-27T21:08:52+05:30/tags/aws-certificate-manager/2023-04-28T19:11:32+05:30/references/coverage/coverage_backup/2023-03-20T14:38:19+01:00/user-guide/aws/backup/2023-08-30T00:43:03+05:30/tags/bash/2023-08-17T22:54:42+05:30/references/coverage/coverage_batch/2023-03-20T14:38:19+01:00/user-guide/aws/batch/2023-09-27T07:30:16+01:00/tags/big-data/2023-06-28T15:22:44+05:00/user-guide/integrations/sdks/cpp/2023-03-07T19:17:35+01:00/tags/cdk/2023-06-23T12:19:51+05:30/tags/cdk-for-terraform/2023-04-23T09:59:36+05:30/tags/cdktf/2023-04-23T09:59:36+05:30/references/coverage/coverage_ce/2023-03-20T14:38:19+01:00/tags/chalice/2023-04-23T09:59:36+05:30/tags/ci/2023-05-04T11:45:00+05:30/tags/cloud-pods/2023-08-17T22:23:40+05:30/references/coverage/coverage_cloudformation/2023-03-20T14:38:19+01:00/tags/cloudformation/2023-08-17T22:54:42+05:30/user-guide/aws/cloudformation/2023-08-30T19:47:20+05:30/references/coverage/coverage_cloudfront/2023-03-20T14:38:19+01:00/user-guide/aws/cloudfront/2023-08-31T11:20:16+05:30/references/coverage/coverage_cloudtrail/2023-03-20T14:38:19+01:00/user-guide/aws/cloudtrail/2023-08-29T21:22:38+05:30/references/coverage/coverage_cloudwatch/2023-03-20T14:38:19+01:00/user-guide/aws/cloudwatch/2023-08-10T09:44:16+05:30/references/coverage/coverage_codecommit/2023-03-20T14:38:19+01:00/user-guide/aws/codecommit/2023-09-05T17:51:59+05:30/user-guide/aws/cognito/2023-10-03T12:22:36-04:00/references/coverage/coverage_cognito-identity/2023-03-20T14:38:19+01:00/references/coverage/coverage_cognito-idp/2023-03-20T14:38:19+01:00/tags/compliance/2023-06-28T15:22:44+05:00/references/coverage/coverage_config/2023-03-20T14:38:19+01:00/user-guide/aws/config/2023-09-11T20:12:33+05:30/tags/container/2023-08-17T22:23:40+05:30/tags/container-image/2023-08-17T22:23:40+05:30/tags/continuous-delivery/2023-05-04T11:45:00+05:30/tags/continuous-integration/2023-05-04T11:45:00+05:30/user-guide/aws/cost-explorer/2023-08-31T12:11:26+05:30/tags/crossplane/2023-09-06T08:59:00+02:00/tags/data-analytics/2023-06-28T15:22:44+05:00/tags/databases/2023-06-28T15:22:44+05:00/tags/development-environment/2023-04-23T09:59:36+05:30/categories/dns/2023-09-29T12:57:11+01:00/references/coverage/coverage_docdb/2023-03-20T14:38:19+01:00/tags/docker/2023-08-17T22:23:40+05:30/tags/docker-desktop/2023-01-13T18:45:43+05:30/2021-10-08T11:40:02+02:00/user-guide/aws/docdb/2023-08-04T11:21:49+05:30/tags/dynamodb/2023-06-28T15:22:44+05:00/references/coverage/coverage_dynamodb/2023-03-20T14:38:19+01:00/user-guide/aws/dynamodb/2023-08-30T12:47:00+05:30/references/coverage/coverage_dynamodbstreams/2023-03-20T14:38:19+01:00/references/coverage/coverage_ec2/2023-03-20T14:38:19+01:00/references/coverage/coverage_ecr/2023-03-20T14:38:19+01:00/tags/ecr/2023-08-17T22:54:42+05:30/references/coverage/coverage_ecs/2023-03-20T14:38:19+01:00/tags/ecs/2023-08-17T22:54:42+05:30/references/coverage/coverage_efs/2023-03-20T14:38:19+01:00/references/coverage/coverage_eks/2023-03-20T14:38:19+01:00/user-guide/aws/elastic-beanstalk/2023-08-31T16:39:58+05:30/user-guide/aws/elastic-compute-cloud/2023-09-21T18:34:37+05:30/user-guide/aws/elastic-container-registry/2023-10-18T17:25:48+02:00/user-guide/aws/elastic-container-service/2023-03-27T16:55:20+02:00/user-guide/aws/elastic-file-system/2023-08-29T21:38:11+05:30/user-guide/aws/elastic-kubernetes-service/2023-10-03T11:00:55+01:00/tags/elastic-load-balancing/2023-08-17T22:23:40+05:30/user-guide/aws/elastic-load-balancing/2023-10-06T17:03:26+05:30/user-guide/aws/elastic-mapreduce/2023-06-21T20:27:39+05:30/references/coverage/coverage_elasticache/2023-03-20T14:38:19+01:00/user-guide/aws/elasticache/2023-09-15T17:41:05+02:00/references/coverage/coverage_elasticbeanstalk/2023-03-20T14:38:19+01:00/user-guide/aws/elasticsearch/2023-03-27T16:55:20+02:00/references/coverage/coverage_elb/2023-03-20T14:38:19+01:00/references/coverage/coverage_elbv2/2023-03-20T14:38:19+01:00/user-guide/aws/mediastore/2023-09-13T11:26:44+01:00/references/coverage/coverage_emr/2023-03-20T14:38:19+01:00/references/coverage/coverage_emr-serverless/2023-10-16T08:43:15+02:00/references/coverage/coverage_es/2023-03-20T14:38:19+01:00/applications/event-driven-architecture-with-amazon-sns-fifo-dynamodb-lambda-and-s3/2023-06-28T15:22:44+05:00/tags/event-driven-architecture/2023-07-27T12:31:23+02:00/user-guide/aws/eventbridge/2023-07-23T22:17:43-04:00/references/coverage/coverage_events/2023-03-20T14:38:19+01:00/tags/extensions/2023-10-12T09:22:38+02:00/tags/fargate/2023-08-17T22:54:42+05:30/user-guide/aws/fis/2023-08-30T13:05:02+05:30/references/coverage/coverage_firehose/2023-03-20T14:38:19+01:00/references/coverage/coverage_fis/2023-03-20T14:38:19+01:00/applications/full-stack-application-with-aws-lambda-dynamodb-s3-for-shipment-validation/2023-06-28T15:22:44+05:00/tags/gitpod/2023-04-23T09:59:36+05:30/references/coverage/coverage_glacier/2023-03-20T14:38:19+01:00/user-guide/aws/glacier/2023-09-13T09:09:02+02:00/references/coverage/coverage_glue/2023-03-20T14:38:19+01:00/user-guide/aws/glue/2023-10-17T14:43:13+02:00/tags/glue-schema-registry/2023-08-17T22:23:40+05:30/user-guide/integrations/sdks/go/2023-02-06T15:46:00+01:00/tags/graphql/2023-06-28T15:22:44+05:00/references/coverage/coverage_iam/2023-03-20T14:38:19+01:00/tags/ide-integration/2023-04-23T09:59:36+05:30/tags/identity/2023-06-28T15:22:44+05:00/user-guide/aws/iam/2023-08-13T16:25:17+05:30/tags/infrastructure-as-code/2023-09-06T08:59:00+02:00/tags/internal-endpoints/2023-05-19T17:05:51+05:30/references/coverage/coverage_iot/2023-03-20T14:38:19+01:00/user-guide/aws/iot/2023-09-21T18:34:37+05:30/references/coverage/coverage_iot-data/2023-03-20T14:38:19+01:00/references/coverage/coverage_iotanalytics/2023-03-20T14:38:19+01:00/references/coverage/coverage_iotwireless/2023-03-20T14:38:19+01:00/user-guide/integrations/sdks/java/2023-08-07T21:00:38+02:00/tags/javascript/2023-08-17T22:23:40+05:30/user-guide/integrations/sdks/javascript/2023-08-17T22:23:40+05:30/tags/k8s/2023-05-19T17:05:51+05:30/references/coverage/coverage_kafka/2023-03-20T14:38:19+01:00/tags/kafka/2023-08-17T22:23:40+05:30/user-guide/aws/kms/2023-08-14T18:56:38+02:00/references/coverage/coverage_kinesis/2023-03-20T14:38:19+01:00/user-guide/aws/kinesis/2023-09-04T23:27:09+05:30/user-guide/aws/kinesis-analytics/2023-08-30T13:04:38+05:30/user-guide/aws/kinesis-firehose/2023-08-30T00:36:11+05:30/references/coverage/coverage_kinesisanalytics/2023-03-20T14:38:19+01:00/references/coverage/coverage_kinesisanalyticsv2/2023-03-20T14:38:19+01:00/references/coverage/coverage_kms/2023-03-20T14:38:19+01:00/tags/kubernetes/2023-09-06T08:59:00+02:00/references/coverage/coverage_lakeformation/2023-03-20T14:38:19+01:00/references/coverage/coverage_lambda/2023-03-20T14:38:19+01:00/tags/lambda/2023-08-17T22:23:40+05:30/user-guide/aws/lambda/2023-10-16T15:48:01+05:30/tags/lambda-layers/2023-08-17T22:23:40+05:30/tags/lambda-trigger/2023-06-28T15:22:44+05:00/user-guide/integrations/sdks/2022-12-01T14:30:06+05:30/applications/loan-broker-application-with-aws-step-functions-dynamodb-lambda-sqs-and-sns/2023-06-28T15:22:44+05:00/categories/localstack/2023-09-28T12:05:02+05:30/categories/localstack-cockpit/2023-04-03T16:21:02+01:00/tags/localstack-enterprise/2023-04-24T21:27:46+05:30/tags/localstack-pro/2023-10-10T02:16:00+05:30/categories/localstack-pro-enterprise/2023-09-19T15:32:31+01:00/tags/localstack-team/2023-04-24T21:27:46+05:30/tags/localstack-endpoints/2023-05-19T17:05:51+05:30/tags/localsurf/2023-06-28T15:22:44+05:00/tags/logging/2023-05-19T17:05:51+05:30/references/coverage/coverage_logs/2023-03-20T14:38:19+01:00/user-guide/aws/logs/2022-12-01T14:30:06+05:30/tags/m1/2023-05-19T17:05:51+05:30/tags/machine-learning/2023-08-17T22:23:40+05:30/user-guide/aws/managed-streaming-for-kafka/2023-08-31T12:07:13+05:30/user-guide/aws/mwaa/2023-08-30T12:46:33+05:30/references/coverage/coverage_mediastore/2023-03-20T14:38:19+01:00/references/coverage/coverage_mediastore-data/2023-03-20T14:38:19+01:00/applications/messaging-processing-application-with-sqs-dynamodb-and-fargate/2023-06-28T15:22:44+05:00/tags/microservices/2023-06-28T15:22:44+05:00/applications/mnist-handwritten-digit-recognition-model-running-on-a-local-sagemaker-endpoint/2023-06-28T15:22:44+05:00/references/coverage/coverage_mq/2023-03-20T14:38:19+01:00/user-guide/aws/mq/2023-09-27T11:21:47+02:00/tags/msk/2023-08-17T22:23:40+05:30/tags/multi-account/2023-09-28T12:05:02+05:30/tags/multi-tenant/2023-09-28T12:05:02+05:30/references/coverage/coverage_mwaa/2023-03-20T14:38:19+01:00/tags/namespaces/2023-09-28T12:05:02+05:30/references/coverage/coverage_neptune/2023-03-20T14:38:19+01:00/user-guide/aws/neptune/2023-09-13T12:01:26+02:00/tags/networking/2023-09-29T12:57:11+01:00/tags/nginx/2023-08-17T22:54:42+05:30/tags/node.js/2023-08-17T22:23:40+05:30/applications/note-taking-application-using-aws-sdk-for-javascript/2023-06-28T15:22:44+05:00/references/coverage/coverage_opensearch/2023-03-20T14:38:19+01:00/user-guide/aws/opensearch/2023-08-30T20:58:41+05:30/references/coverage/coverage_organizations/2023-03-20T14:38:19+01:00/user-guide/integrations/sdks/php/2022-12-01T14:30:06+05:30/tags/podman/2023-05-19T17:05:51+05:30/tags/pulumi/2023-02-03T15:18:39+05:30/user-guide/integrations/sdks/python/2023-03-17T10:22:16+00:00/references/coverage/coverage_qldb/2023-03-20T14:38:19+01:00/references/coverage/coverage_qldb-session/2023-03-20T14:38:19+01:00/user-guide/aws/qldb/2023-02-03T15:18:39+05:30/applications/query-data-in-s3-bucket-with-amazon-athena-glue-catalog-cloudformation/2023-06-28T15:22:44+05:00/references/coverage/coverage_ram/2023-10-16T08:43:15+02:00/tags/raspberry-pi/2023-05-19T17:05:51+05:30/tags/rds/2023-06-28T15:22:44+05:00/references/coverage/coverage_rds/2023-03-20T14:38:19+01:00/references/coverage/coverage_rds-data/2023-03-20T14:38:19+01:00/tags/rds-proxy/2023-07-27T12:31:23+02:00/references/coverage/coverage_redshift/2023-03-20T14:38:19+01:00/user-guide/aws/redshift/2023-09-01T15:19:01+05:30/references/coverage/coverage_redshift-data/2023-03-20T14:38:19+01:00/user-guide/aws/rds/2023-10-11T16:58:45+02:00/tags/reproducible/2023-08-17T22:23:40+05:30/user-guide/aws/resourcegroups/2023-09-11T16:47:36+05:30/references/coverage/coverage_resource-groups/2023-03-20T14:38:19+01:00/references/coverage/coverage_resourcegroupstaggingapi/2023-03-20T14:38:19+01:00/references/coverage/coverage_route53/2023-03-20T14:38:19+01:00/user-guide/aws/route53/2023-09-15T09:42:50+05:30/references/coverage/coverage_route53resolver/2023-03-20T14:38:19+01:00/tags/ruby/2023-04-27T11:54:24+05:30/user-guide/integrations/sdks/ruby/2023-04-27T11:54:24+05:30/tags/rule-based-authentication/2023-06-28T15:22:44+05:00/references/coverage/coverage_s3/2023-03-20T14:38:19+01:00/tags/s3/2023-08-17T22:23:40+05:30/user-guide/aws/s3/2023-09-27T07:46:00+02:00/tags/s3-website/2023-08-17T22:23:40+05:30/references/coverage/coverage_s3control/2023-03-20T14:38:19+01:00/references/coverage/coverage_sagemaker/2023-03-20T14:38:19+01:00/user-guide/aws/sagemaker/2023-10-12T13:40:11+05:30/references/coverage/coverage_sagemaker-runtime/2023-03-20T14:38:19+01:00/tags/sam/2022-12-01T14:30:06+05:30/references/coverage/coverage_scheduler/2023-10-16T08:43:15+02:00/tags/schema-evolution/2023-08-17T22:23:40+05:30/tags/sdk/2023-09-11T10:43:08+03:00/applications/search-application-with-lambda-kinesis-firehose-elasticsearch-s3/2023-07-27T12:31:23+02:00/tags/secret-access-key/2023-05-19T17:05:51+05:30/user-guide/aws/secretsmanager/2023-09-11T19:23:39+05:30/references/coverage/coverage_secretsmanager/2023-03-20T14:38:19+01:00/tags/security/2023-06-28T15:22:44+05:00/user-guide/aws/security-token-service/2023-09-13T06:43:17+02:00/tags/self-managed/2023-04-23T09:59:36+05:30/tags/serverless/2023-07-27T12:31:23+02:00/user-guide/aws/serverlessrepo/2023-09-11T19:10:28+05:30/applications/serverless-container-based-apis-with-amazon-ecs-api-gateway/2023-06-28T15:22:44+05:00/applications/serverless-image-resizer-with-aws-lambda-s3-sns-and-ses/2023-06-28T15:22:44+05:00/applications/serverless-microservices-with-amazon-api-gateway-dynamodb-sqs-and-lambda/2023-06-28T15:22:44+05:00/applications/serverless-rds-proxy-with-api-gateway-lambda-and-aurora-rds/2023-07-27T12:31:23+02:00/applications/serverless-transcription-application-using-transcribe-s3-lambda-sqs-and-ses/2023-06-28T15:22:44+05:00/tags/serverless-containers/2023-06-28T15:22:44+05:00/tags/serverless-localstack-plugin/2023-08-17T22:23:40+05:30/references/coverage/coverage_serverlessrepo/2023-03-20T14:38:19+01:00/user-guide/aws/servicediscovery/2023-09-04T23:45:02+05:30/references/coverage/coverage_servicediscovery/2023-03-20T14:38:19+01:00/references/coverage/coverage_ses/2023-03-20T14:38:19+01:00/references/coverage/coverage_sesv2/2023-03-20T14:38:19+01:00/tags/silicon/2023-05-19T17:05:51+05:30/tags/simple-email-service/2023-08-17T22:54:42+05:30/user-guide/aws/ses/2023-09-27T11:21:28+05:30/tags/simple-notification-service/2023-08-17T22:54:42+05:30/user-guide/aws/sns/2023-08-24T22:36:50+05:30/tags/simple-queue-service/2023-08-17T22:54:42+05:30/user-guide/aws/sqs/2023-10-19T12:28:24+02:00/user-guide/aws/swf/2023-09-02T00:15:24+05:30/references/coverage/coverage_sns/2023-03-20T14:38:19+01:00/tags/spring-boot/2023-08-17T22:54:42+05:30/references/coverage/coverage_sqs/2023-03-20T14:38:19+01:00/tags/ssl/2023-08-02T12:53:03+02:00/references/coverage/coverage_ssm/2023-03-20T14:38:19+01:00/tags/sso/2023-10-10T02:16:00+05:30/references/coverage/coverage_sso-admin/2023-10-16T08:43:15+02:00/tags/stack-insights/2023-02-20T23:11:36+01:00/tags/static-website/2023-08-17T22:23:40+05:30/user-guide/aws/stepfunctions/2023-09-02T00:12:48+05:30/applications/step-up-authentication-using-amazon-cognito/2023-06-28T15:22:44+05:00/tags/step-up-auth/2023-06-28T15:22:44+05:00/references/coverage/coverage_stepfunctions/2023-03-20T14:38:19+01:00/references/coverage/coverage_sts/2023-03-20T14:38:19+01:00/references/coverage/coverage_support/2023-03-20T14:38:19+01:00/user-guide/aws/support/2023-08-30T15:39:42+05:30/references/coverage/coverage_swf/2023-03-20T14:38:19+01:00/user-guide/aws/systems-manager/2023-09-11T15:14:44+05:30/tags/terraform/2023-08-17T22:23:40+05:30/tags/testing/2023-05-04T11:45:00+05:30/tags/tflocal-cli/2023-08-17T22:23:40+05:30/user-guide/aws/timestream/2023-07-20T15:44:07+02:00/references/coverage/coverage_timestream-query/2023-03-20T14:38:19+01:00/references/coverage/coverage_timestream-write/2023-03-20T14:38:19+01:00/categories/tools/2023-09-29T12:57:11+01:00/references/coverage/coverage_transcribe/2023-03-20T14:38:19+01:00/user-guide/aws/transcribe/2023-09-27T11:21:47+02:00/references/coverage/coverage_transfer/2023-03-20T14:38:19+01:00/user-guide/aws/transfer/2023-09-11T18:22:02-05:00/tags/troubleshooting/2023-09-29T12:57:11+01:00/user-guide/aws/xray/2023-09-18T08:38:19+02:00/references/coverage/coverage_xray/2023-03-20T14:38:19+01:00 \ No newline at end of file +/user-guide/aws/feature-coverage/2023-09-18T08:38:19+02:00/references/network-troubleshooting/endpoint-url/2023-09-29T12:57:11+01:00/academy/localstack-101/course-overview/2023-08-23T14:33:03+05:00/user-guide/aws/2022-12-01T14:30:06+05:30/references/network-troubleshooting/2023-05-19T17:05:51+05:30/developer-hub/2023-03-30T17:05:01+02:00/overview/2023-08-17T22:23:40+05:30/tutorials/schema-evolution-glue-msk/2023-08-17T22:23:40+05:30/user-guide/web-application/accounts/2023-08-17T22:23:40+05:30/user-guide/integrations/aws-cli/2023-10-16T20:33:16+05:30/tutorials/lambda-ecr-container-images/2023-08-17T22:23:40+05:30/getting-started/2023-08-17T22:23:40+05:30/user-guide/integrations/2022-12-01T14:30:06+05:30/user-guide/web-application/teams/2023-04-17T16:22:53+05:30/references/network-troubleshooting/transparent-endpoint-injection/2023-09-29T12:57:11+01:00/academy/localstack-101/what-is-localstack/2023-08-23T14:33:03+05:00/references/network-troubleshooting/created-resources/2023-09-29T12:57:11+01:00/tutorials/java-notification-app/2023-08-17T22:54:42+05:30/contributing/contributing/2022-12-01T14:30:06+05:30/user-guide/extensions/2023-10-12T09:22:38+02:00/user-guide/tools/cloud-pods/getting-started/2023-10-17T12:06:17+05:30/user-guide/ci/2023-04-27T14:09:45+05:30/user-guide/extensions/quickstart/2023-10-12T09:22:38+02:00/tutorials/elb-load-balancing/2023-08-17T22:23:40+05:30/user-guide/web-application/stack-insights/2023-02-20T23:11:36+01:00/academy/localstack-101/why-localstack/2023-08-23T14:33:03+05:00/user-guide/ci/circle-ci/2023-04-27T14:09:45+05:30/user-guide/tools/cloud-pods/pods-cli/2023-10-17T12:06:17+05:30/contributing/development-environment-setup/2023-09-26T13:38:02+02:00/academy/localstack-101/getting-started/2023-08-23T14:33:03+05:00/tutorials/s3-static-website-terraform/2023-08-17T22:23:40+05:30/user-guide/web-application/resource-browser/2023-04-24T21:27:46+05:30/user-guide/integrations/serverless-framework/2023-03-27T16:55:20+02:00/user-guide/integrations/testcontainers/2023-06-23T00:43:59-06:00/user-guide/integrations/spring-cloud-function/2023-03-27T16:55:20+02:00/user-guide/tools/lambda-tools/hot-reloading/2023-09-16T14:23:55+02:00/user-guide/integrations/architect/2022-12-01T14:30:06+05:30/user-guide/integrations/copilot/2022-12-01T14:30:06+05:30/user-guide/web-application/cloud-pods-browser/2023-04-24T21:27:46+05:30/tutorials/reproducible-machine-learning-cloud-pods/2023-08-17T22:23:40+05:30/user-guide/integrations/crossplane/2023-09-06T08:59:00+02:00/user-guide/ci/drone-ci/2023-04-27T14:09:45+05:30/user-guide/web-application/extensions-library/2023-10-03T12:28:46-07:00/user-guide/ci/github-actions/2023-04-27T14:09:45+05:30/references/lambda-provider-v2/2023-05-08T14:00:03+00:00/references/coverage/2023-05-19T17:05:51+05:30/user-guide/tools/testing-tools/2022-12-01T14:30:06+05:30/user-guide/extensions/managing-extensions/2023-10-12T09:22:38+02:00/user-guide/tools/lambda-tools/debugging/2023-09-16T14:23:55+02:00/user-guide/tools/cloud-pods/remotes/2023-10-17T12:06:17+05:30/user-guide/web-application/single-sign-on/azure-ad/2023-03-02T21:22:50+05:30/user-guide/integrations/terraform/2023-10-16T20:59:13+05:30/academy/localstack-101/web-app-resource-browser/2023-08-23T14:33:03+05:00/user-guide/tools/cockpit/2023-04-03T16:21:02+01:00/tutorials/ecs-ecr-container-app/2023-08-17T22:54:42+05:30/user-guide/tools/transparent-endpoint-injection/dns-server/2023-09-29T12:57:11+01:00/user-guide/web-application/export-import-state/2023-10-10T02:16:00+05:30/academy/localstack-101/full-project-demo/2023-08-23T14:33:03+05:00/academy/localstack-101/2023-08-23T14:33:03+05:00/contributing/concepts/2022-12-29T12:19:43+01:00/user-guide/tools/transparent-endpoint-injection/patched-sdks/2023-05-04T17:56:26+05:30/user-guide/ci/travis-ci/2023-04-27T14:09:45+05:30/user-guide/integrations/aws-sam/2022-12-01T14:30:06+05:30/academy/localstack-101/cloud-pods/2023-08-23T14:33:03+05:00/user-guide/web-application/custom-local-endpoint/custom-local-endpoint/2023-10-10T02:16:00+05:30/user-guide/ci/gitlab-ci/2023-05-04T11:45:00+05:30/contributing/integration-tests/2023-10-12T10:43:09+02:00/user-guide/tools/localsurf/2023-03-14T14:32:31+05:30/contributing/parity-testing/2023-02-03T15:18:39+05:30/user-guide/2022-12-01T14:30:06+05:30/user-guide/integrations/aws-cdk/2023-06-23T12:19:51+05:30/user-guide/ci/harness-ci/2023-04-27T14:09:45+05:30/user-guide/tools/localstack-docker-extension/2023-01-13T18:45:43+05:30/user-guide/web-application/single-sign-on/2023-10-10T02:16:00+05:30/user-guide/tools/lambda-tools/lambda-vscode-extension/2023-10-16T15:48:01+05:30/user-guide/tools/cloud-pods/2023-10-17T12:06:17+05:30/references/configuration/2023-10-11T16:58:45+02:00/user-guide/extensions/developing-extensions/2023-10-12T09:22:38+02:00/getting-started/installation/2023-09-29T12:57:11+01:00/user-guide/tools/lambda-tools/2022-12-01T14:30:06+05:30/user-guide/tools/cloud-pods/launchpad/2023-10-17T12:06:17+05:30/user-guide/integrations/pulumi/2023-02-03T15:18:39+05:30/contributing/terraform-tests/2022-12-01T14:30:06+05:30/user-guide/tools/transparent-endpoint-injection/2023-03-27T16:55:20+02:00/tutorials/2023-03-30T17:05:01+02:00/user-guide/integrations/cdk-for-terraform/2023-04-23T09:59:36+05:30/user-guide/integrations/kafka/2023-04-23T09:59:36+05:30/user-guide/integrations/chalice/2023-04-23T09:59:36+05:30/user-guide/integrations/gitpod/2023-04-23T09:59:36+05:30/user-guide/integrations/former2/2023-10-15T10:31:51+05:30/user-guide/extensions/official-extensions/2023-10-12T09:22:38+02:00/user-guide/integrations/cloud-custodian/2023-10-18T13:18:40+05:30/getting-started/api-key/2023-09-19T15:32:31+01:00/applications/2023-03-30T17:05:01+02:00/academy/2023-08-23T14:33:03+05:00/getting-started/quickstart/2023-06-23T09:37:24+02:00/getting-started/faq/2023-09-29T12:57:11+01:00/user-guide/tools/2022-12-01T14:30:06+05:30/references/arm64-support/2023-05-19T17:05:51+05:30/references/credentials/2023-05-19T17:05:51+05:30/references/cross-account-access/2023-09-28T12:05:02+05:30/references/custom-tls-certificates/2023-08-02T12:53:03+02:00/references/docker-images/2023-05-19T17:05:51+05:30/references/extensions/2023-10-12T09:22:38+02:00/references/external-ports/2023-09-04T20:13:29+05:30/references/filesystem/2023-05-19T17:05:51+05:30/getting-started/glossary/2023-10-12T09:22:38+02:00/references/init-hooks/2023-09-13T12:33:31+02:00/references/internal-endpoints/2023-05-19T17:05:51+05:30/references/localstack-on-kubernetes/2023-05-19T17:05:51+05:30/user-guide/web-application/2022-12-01T14:30:06+05:30/references/logging/2023-05-19T17:05:51+05:30/references/multi-account-setups/2023-05-25T10:39:37+05:30/references/persistence-mechanism/2023-08-17T22:23:40+05:30/references/podman/2023-05-19T17:05:51+05:30/references/2023-02-03T15:18:39+05:30/references/usage-tracking/2023-05-19T17:05:51+05:30/contributing/2022-12-01T14:30:06+05:30/getting-started/help-and-support/2023-06-23T09:37:24+02:00/user-guide/tools/cloud-pods/community/2023-10-13T09:43:04+05:30/categories/2023-10-20T10:10:29+02:00/tags/dotnet/2023-06-23T00:43:59-06:00/tags/go/2023-06-23T00:43:59-06:00/tags/java/2023-08-17T22:54:42+05:30/tags/jvm/2023-06-23T00:43:59-06:00/tags/kotlin/2023-06-23T00:43:59-06:00/categories/localstack-community/2023-09-16T14:23:55+02:00/categories/localstack-pro/2023-10-20T10:10:29+02:00/tags/2023-10-12T09:22:38+02:00/tags/test/2023-06-23T00:43:59-06:00/tags/testcontainers/2023-06-23T00:43:59-06:00/tags/serverless-framework/2023-08-17T22:23:40+05:30/tags/spring/2023-03-27T16:55:20+02:00/tags/spring-cloud/2023-03-27T16:55:20+02:00/tags/spring-cloud-function/2023-03-27T16:55:20+02:00/applications/temp/2023-03-30T17:05:01+02:00/references/network-troubleshooting/readme/2023-03-17T10:22:16+00:00/user-guide/integrations/sdks/dotnet/2023-09-11T10:43:08+03:00/tags/access-key-id/2023-05-19T17:05:51+05:30/tags/account-id/2023-05-25T10:39:37+05:30/tags/accounts/2023-08-17T22:23:40+05:30/tags/acm/2023-04-28T19:11:32+05:30/references/coverage/coverage_acm/2023-03-20T14:38:19+01:00/user-guide/aws/apigateway/2023-05-11T08:58:11+03:00/applications/amazon-rds-initialization-using-cdk-lambda-ecr-and-secrets-manager/2023-06-28T15:22:44+05:00/tags/amplify/2023-04-27T21:08:52+05:30/references/coverage/coverage_amplify/2023-03-20T14:38:19+01:00/tags/amplify-localstack/2023-04-27T21:08:52+05:30/tags/amplify-plugin/2023-04-27T21:08:52+05:30/tags/amplifylocal/2023-04-27T21:08:52+05:30/tags/apigateway/2023-05-11T08:58:11+03:00/references/coverage/coverage_apigateway/2023-03-20T14:38:19+01:00/tags/apigateway-localstack/2023-05-11T08:58:11+03:00/references/coverage/coverage_apigatewaymanagementapi/2023-03-20T14:38:19+01:00/tags/apigatewayv2/2023-05-11T08:58:11+03:00/references/coverage/coverage_apigatewayv2/2023-03-20T14:38:19+01:00/references/coverage/coverage_appconfig/2023-03-20T14:38:19+01:00/user-guide/aws/appconfig/2023-08-30T15:42:43+05:30/tags/apple/2023-05-19T17:05:51+05:30/user-guide/aws/application-autoscaling/2023-08-31T16:43:39+05:30/references/coverage/coverage_application-autoscaling/2023-03-20T14:38:19+01:00/tags/appsync/2023-06-28T15:22:44+05:00/references/coverage/coverage_appsync/2023-03-20T14:38:19+01:00/user-guide/aws/appsync/2023-09-04T23:45:02+05:30/applications/appsync-graphql-apis-for-dynamodb-and-rds-aurora-postgresql/2023-06-28T15:22:44+05:00/tags/architect/2022-12-01T14:30:06+05:30/references/coverage/coverage_athena/2023-03-20T14:38:19+01:00/user-guide/aws/athena/2023-09-05T13:17:30+05:30/references/coverage/coverage_autoscaling/2023-03-20T14:38:19+01:00/user-guide/aws/amplify/2023-04-27T21:08:52+05:30/user-guide/aws/acm/2023-04-28T19:11:32+05:30/tags/aws-java-sdk/2023-08-17T22:54:42+05:30/user-guide/aws/organization/2022-12-01T14:30:06+05:30/tags/aws-amplify/2023-04-27T21:08:52+05:30/tags/aws-certificate-manager/2023-04-28T19:11:32+05:30/references/coverage/coverage_backup/2023-03-20T14:38:19+01:00/user-guide/aws/backup/2023-08-30T00:43:03+05:30/tags/bash/2023-08-17T22:54:42+05:30/references/coverage/coverage_batch/2023-03-20T14:38:19+01:00/user-guide/aws/batch/2023-09-27T07:30:16+01:00/tags/big-data/2023-06-28T15:22:44+05:00/user-guide/integrations/sdks/cpp/2023-03-07T19:17:35+01:00/tags/cdk/2023-06-23T12:19:51+05:30/tags/cdk-for-terraform/2023-04-23T09:59:36+05:30/tags/cdktf/2023-04-23T09:59:36+05:30/references/coverage/coverage_ce/2023-03-20T14:38:19+01:00/tags/chalice/2023-04-23T09:59:36+05:30/tags/ci/2023-05-04T11:45:00+05:30/tags/cloud-pods/2023-08-17T22:23:40+05:30/references/coverage/coverage_cloudformation/2023-03-20T14:38:19+01:00/tags/cloudformation/2023-08-17T22:54:42+05:30/user-guide/aws/cloudformation/2023-08-30T19:47:20+05:30/references/coverage/coverage_cloudfront/2023-03-20T14:38:19+01:00/user-guide/aws/cloudfront/2023-08-31T11:20:16+05:30/references/coverage/coverage_cloudtrail/2023-03-20T14:38:19+01:00/user-guide/aws/cloudtrail/2023-08-29T21:22:38+05:30/references/coverage/coverage_cloudwatch/2023-03-20T14:38:19+01:00/user-guide/aws/cloudwatch/2023-08-10T09:44:16+05:30/references/coverage/coverage_codecommit/2023-03-20T14:38:19+01:00/user-guide/aws/codecommit/2023-09-05T17:51:59+05:30/user-guide/aws/cognito/2023-10-03T12:22:36-04:00/references/coverage/coverage_cognito-identity/2023-03-20T14:38:19+01:00/references/coverage/coverage_cognito-idp/2023-03-20T14:38:19+01:00/tags/compliance/2023-06-28T15:22:44+05:00/references/coverage/coverage_config/2023-03-20T14:38:19+01:00/user-guide/aws/config/2023-09-11T20:12:33+05:30/tags/container/2023-08-17T22:23:40+05:30/tags/container-image/2023-08-17T22:23:40+05:30/tags/continuous-delivery/2023-05-04T11:45:00+05:30/tags/continuous-integration/2023-05-04T11:45:00+05:30/user-guide/aws/cost-explorer/2023-08-31T12:11:26+05:30/tags/crossplane/2023-09-06T08:59:00+02:00/tags/data-analytics/2023-06-28T15:22:44+05:00/tags/databases/2023-06-28T15:22:44+05:00/tags/development-environment/2023-04-23T09:59:36+05:30/categories/dns/2023-09-29T12:57:11+01:00/references/coverage/coverage_docdb/2023-03-20T14:38:19+01:00/tags/docker/2023-08-17T22:23:40+05:30/tags/docker-desktop/2023-01-13T18:45:43+05:30/2021-10-08T11:40:02+02:00/user-guide/aws/docdb/2023-08-04T11:21:49+05:30/tags/dynamodb/2023-06-28T15:22:44+05:00/references/coverage/coverage_dynamodb/2023-03-20T14:38:19+01:00/user-guide/aws/dynamodb/2023-08-30T12:47:00+05:30/references/coverage/coverage_dynamodbstreams/2023-03-20T14:38:19+01:00/references/coverage/coverage_ec2/2023-03-20T14:38:19+01:00/references/coverage/coverage_ecr/2023-03-20T14:38:19+01:00/tags/ecr/2023-08-17T22:54:42+05:30/references/coverage/coverage_ecs/2023-03-20T14:38:19+01:00/tags/ecs/2023-08-17T22:54:42+05:30/references/coverage/coverage_efs/2023-03-20T14:38:19+01:00/references/coverage/coverage_eks/2023-03-20T14:38:19+01:00/user-guide/aws/elastic-beanstalk/2023-08-31T16:39:58+05:30/user-guide/aws/elastic-compute-cloud/2023-09-21T18:34:37+05:30/user-guide/aws/elastic-container-registry/2023-10-18T17:25:48+02:00/user-guide/aws/elastic-container-service/2023-03-27T16:55:20+02:00/user-guide/aws/elastic-file-system/2023-08-29T21:38:11+05:30/user-guide/aws/elastic-kubernetes-service/2023-10-03T11:00:55+01:00/tags/elastic-load-balancing/2023-08-17T22:23:40+05:30/user-guide/aws/elastic-load-balancing/2023-10-06T17:03:26+05:30/user-guide/aws/elastic-mapreduce/2023-06-21T20:27:39+05:30/references/coverage/coverage_elasticache/2023-03-20T14:38:19+01:00/user-guide/aws/elasticache/2023-09-15T17:41:05+02:00/references/coverage/coverage_elasticbeanstalk/2023-03-20T14:38:19+01:00/user-guide/aws/elasticsearch/2023-03-27T16:55:20+02:00/references/coverage/coverage_elb/2023-03-20T14:38:19+01:00/references/coverage/coverage_elbv2/2023-03-20T14:38:19+01:00/user-guide/aws/mediastore/2023-09-13T11:26:44+01:00/references/coverage/coverage_emr/2023-03-20T14:38:19+01:00/references/coverage/coverage_emr-serverless/2023-10-16T08:43:15+02:00/references/coverage/coverage_es/2023-03-20T14:38:19+01:00/applications/event-driven-architecture-with-amazon-sns-fifo-dynamodb-lambda-and-s3/2023-06-28T15:22:44+05:00/tags/event-driven-architecture/2023-07-27T12:31:23+02:00/user-guide/aws/eventbridge/2023-07-23T22:17:43-04:00/references/coverage/coverage_events/2023-03-20T14:38:19+01:00/tags/extensions/2023-10-12T09:22:38+02:00/tags/fargate/2023-08-17T22:54:42+05:30/user-guide/aws/fis/2023-08-30T13:05:02+05:30/references/coverage/coverage_firehose/2023-03-20T14:38:19+01:00/references/coverage/coverage_fis/2023-03-20T14:38:19+01:00/applications/full-stack-application-with-aws-lambda-dynamodb-s3-for-shipment-validation/2023-06-28T15:22:44+05:00/tags/gitpod/2023-04-23T09:59:36+05:30/references/coverage/coverage_glacier/2023-03-20T14:38:19+01:00/user-guide/aws/glacier/2023-09-13T09:09:02+02:00/references/coverage/coverage_glue/2023-03-20T14:38:19+01:00/user-guide/aws/glue/2023-10-17T14:43:13+02:00/tags/glue-schema-registry/2023-08-17T22:23:40+05:30/user-guide/integrations/sdks/go/2023-02-06T15:46:00+01:00/tags/graphql/2023-06-28T15:22:44+05:00/references/coverage/coverage_iam/2023-03-20T14:38:19+01:00/tags/ide-integration/2023-04-23T09:59:36+05:30/tags/identity/2023-06-28T15:22:44+05:00/user-guide/aws/iam/2023-08-13T16:25:17+05:30/tags/infrastructure-as-code/2023-09-06T08:59:00+02:00/tags/internal-endpoints/2023-05-19T17:05:51+05:30/references/coverage/coverage_iot/2023-03-20T14:38:19+01:00/user-guide/aws/iot/2023-09-21T18:34:37+05:30/references/coverage/coverage_iot-data/2023-03-20T14:38:19+01:00/references/coverage/coverage_iotanalytics/2023-03-20T14:38:19+01:00/references/coverage/coverage_iotwireless/2023-03-20T14:38:19+01:00/user-guide/integrations/sdks/java/2023-08-07T21:00:38+02:00/tags/javascript/2023-08-17T22:23:40+05:30/user-guide/integrations/sdks/javascript/2023-08-17T22:23:40+05:30/tags/k8s/2023-05-19T17:05:51+05:30/references/coverage/coverage_kafka/2023-03-20T14:38:19+01:00/tags/kafka/2023-08-17T22:23:40+05:30/user-guide/aws/kms/2023-08-14T18:56:38+02:00/references/coverage/coverage_kinesis/2023-03-20T14:38:19+01:00/user-guide/aws/kinesis/2023-09-04T23:27:09+05:30/user-guide/aws/kinesis-analytics/2023-08-30T13:04:38+05:30/user-guide/aws/kinesis-firehose/2023-08-30T00:36:11+05:30/references/coverage/coverage_kinesisanalytics/2023-03-20T14:38:19+01:00/references/coverage/coverage_kinesisanalyticsv2/2023-03-20T14:38:19+01:00/references/coverage/coverage_kms/2023-03-20T14:38:19+01:00/tags/kubernetes/2023-09-06T08:59:00+02:00/references/coverage/coverage_lakeformation/2023-03-20T14:38:19+01:00/references/coverage/coverage_lambda/2023-03-20T14:38:19+01:00/tags/lambda/2023-08-17T22:23:40+05:30/user-guide/aws/lambda/2023-10-16T15:48:01+05:30/tags/lambda-layers/2023-08-17T22:23:40+05:30/tags/lambda-trigger/2023-06-28T15:22:44+05:00/user-guide/integrations/sdks/2022-12-01T14:30:06+05:30/applications/loan-broker-application-with-aws-step-functions-dynamodb-lambda-sqs-and-sns/2023-06-28T15:22:44+05:00/categories/localstack/2023-09-28T12:05:02+05:30/categories/localstack-cockpit/2023-04-03T16:21:02+01:00/tags/localstack-enterprise/2023-04-24T21:27:46+05:30/tags/localstack-pro/2023-10-10T02:16:00+05:30/categories/localstack-pro-enterprise/2023-09-19T15:32:31+01:00/tags/localstack-team/2023-04-24T21:27:46+05:30/tags/localstack-endpoints/2023-05-19T17:05:51+05:30/tags/localsurf/2023-06-28T15:22:44+05:00/tags/logging/2023-05-19T17:05:51+05:30/references/coverage/coverage_logs/2023-03-20T14:38:19+01:00/user-guide/aws/logs/2022-12-01T14:30:06+05:30/tags/m1/2023-05-19T17:05:51+05:30/tags/machine-learning/2023-08-17T22:23:40+05:30/user-guide/aws/managed-streaming-for-kafka/2023-08-31T12:07:13+05:30/user-guide/aws/mwaa/2023-08-30T12:46:33+05:30/references/coverage/coverage_mediastore/2023-03-20T14:38:19+01:00/references/coverage/coverage_mediastore-data/2023-03-20T14:38:19+01:00/applications/messaging-processing-application-with-sqs-dynamodb-and-fargate/2023-06-28T15:22:44+05:00/tags/microservices/2023-06-28T15:22:44+05:00/applications/mnist-handwritten-digit-recognition-model-running-on-a-local-sagemaker-endpoint/2023-06-28T15:22:44+05:00/references/coverage/coverage_mq/2023-03-20T14:38:19+01:00/user-guide/aws/mq/2023-09-27T11:21:47+02:00/tags/msk/2023-08-17T22:23:40+05:30/tags/multi-account/2023-09-28T12:05:02+05:30/tags/multi-tenant/2023-09-28T12:05:02+05:30/references/coverage/coverage_mwaa/2023-03-20T14:38:19+01:00/tags/namespaces/2023-09-28T12:05:02+05:30/references/coverage/coverage_neptune/2023-03-20T14:38:19+01:00/user-guide/aws/neptune/2023-09-13T12:01:26+02:00/tags/networking/2023-09-29T12:57:11+01:00/tags/nginx/2023-08-17T22:54:42+05:30/tags/node.js/2023-08-17T22:23:40+05:30/applications/note-taking-application-using-aws-sdk-for-javascript/2023-06-28T15:22:44+05:00/references/coverage/coverage_opensearch/2023-03-20T14:38:19+01:00/user-guide/aws/opensearch/2023-08-30T20:58:41+05:30/references/coverage/coverage_organizations/2023-03-20T14:38:19+01:00/user-guide/integrations/sdks/php/2022-12-01T14:30:06+05:30/tags/podman/2023-05-19T17:05:51+05:30/tags/pulumi/2023-02-03T15:18:39+05:30/user-guide/integrations/sdks/python/2023-03-17T10:22:16+00:00/references/coverage/coverage_qldb/2023-03-20T14:38:19+01:00/references/coverage/coverage_qldb-session/2023-03-20T14:38:19+01:00/user-guide/aws/qldb/2023-10-20T10:10:29+02:00/applications/query-data-in-s3-bucket-with-amazon-athena-glue-catalog-cloudformation/2023-06-28T15:22:44+05:00/references/coverage/coverage_ram/2023-10-16T08:43:15+02:00/tags/raspberry-pi/2023-05-19T17:05:51+05:30/tags/rds/2023-06-28T15:22:44+05:00/references/coverage/coverage_rds/2023-03-20T14:38:19+01:00/references/coverage/coverage_rds-data/2023-03-20T14:38:19+01:00/tags/rds-proxy/2023-07-27T12:31:23+02:00/references/coverage/coverage_redshift/2023-03-20T14:38:19+01:00/user-guide/aws/redshift/2023-09-01T15:19:01+05:30/references/coverage/coverage_redshift-data/2023-03-20T14:38:19+01:00/user-guide/aws/rds/2023-10-11T16:58:45+02:00/tags/reproducible/2023-08-17T22:23:40+05:30/user-guide/aws/resourcegroups/2023-09-11T16:47:36+05:30/references/coverage/coverage_resource-groups/2023-03-20T14:38:19+01:00/references/coverage/coverage_resourcegroupstaggingapi/2023-03-20T14:38:19+01:00/references/coverage/coverage_route53/2023-03-20T14:38:19+01:00/user-guide/aws/route53/2023-09-15T09:42:50+05:30/references/coverage/coverage_route53resolver/2023-03-20T14:38:19+01:00/tags/ruby/2023-04-27T11:54:24+05:30/user-guide/integrations/sdks/ruby/2023-04-27T11:54:24+05:30/tags/rule-based-authentication/2023-06-28T15:22:44+05:00/references/coverage/coverage_s3/2023-03-20T14:38:19+01:00/tags/s3/2023-08-17T22:23:40+05:30/user-guide/aws/s3/2023-09-27T07:46:00+02:00/tags/s3-website/2023-08-17T22:23:40+05:30/references/coverage/coverage_s3control/2023-03-20T14:38:19+01:00/references/coverage/coverage_sagemaker/2023-03-20T14:38:19+01:00/user-guide/aws/sagemaker/2023-10-12T13:40:11+05:30/references/coverage/coverage_sagemaker-runtime/2023-03-20T14:38:19+01:00/tags/sam/2022-12-01T14:30:06+05:30/references/coverage/coverage_scheduler/2023-10-16T08:43:15+02:00/tags/schema-evolution/2023-08-17T22:23:40+05:30/tags/sdk/2023-09-11T10:43:08+03:00/applications/search-application-with-lambda-kinesis-firehose-elasticsearch-s3/2023-07-27T12:31:23+02:00/tags/secret-access-key/2023-05-19T17:05:51+05:30/user-guide/aws/secretsmanager/2023-09-11T19:23:39+05:30/references/coverage/coverage_secretsmanager/2023-03-20T14:38:19+01:00/tags/security/2023-06-28T15:22:44+05:00/user-guide/aws/security-token-service/2023-09-13T06:43:17+02:00/tags/self-managed/2023-04-23T09:59:36+05:30/tags/serverless/2023-07-27T12:31:23+02:00/user-guide/aws/serverlessrepo/2023-09-11T19:10:28+05:30/applications/serverless-container-based-apis-with-amazon-ecs-api-gateway/2023-06-28T15:22:44+05:00/applications/serverless-image-resizer-with-aws-lambda-s3-sns-and-ses/2023-06-28T15:22:44+05:00/applications/serverless-microservices-with-amazon-api-gateway-dynamodb-sqs-and-lambda/2023-06-28T15:22:44+05:00/applications/serverless-rds-proxy-with-api-gateway-lambda-and-aurora-rds/2023-07-27T12:31:23+02:00/applications/serverless-transcription-application-using-transcribe-s3-lambda-sqs-and-ses/2023-06-28T15:22:44+05:00/tags/serverless-containers/2023-06-28T15:22:44+05:00/tags/serverless-localstack-plugin/2023-08-17T22:23:40+05:30/references/coverage/coverage_serverlessrepo/2023-03-20T14:38:19+01:00/user-guide/aws/servicediscovery/2023-09-04T23:45:02+05:30/references/coverage/coverage_servicediscovery/2023-03-20T14:38:19+01:00/references/coverage/coverage_ses/2023-03-20T14:38:19+01:00/references/coverage/coverage_sesv2/2023-03-20T14:38:19+01:00/tags/silicon/2023-05-19T17:05:51+05:30/tags/simple-email-service/2023-08-17T22:54:42+05:30/user-guide/aws/ses/2023-09-27T11:21:28+05:30/tags/simple-notification-service/2023-08-17T22:54:42+05:30/user-guide/aws/sns/2023-08-24T22:36:50+05:30/tags/simple-queue-service/2023-08-17T22:54:42+05:30/user-guide/aws/sqs/2023-10-19T12:28:24+02:00/user-guide/aws/swf/2023-09-02T00:15:24+05:30/references/coverage/coverage_sns/2023-03-20T14:38:19+01:00/tags/spring-boot/2023-08-17T22:54:42+05:30/references/coverage/coverage_sqs/2023-03-20T14:38:19+01:00/tags/ssl/2023-08-02T12:53:03+02:00/references/coverage/coverage_ssm/2023-03-20T14:38:19+01:00/tags/sso/2023-10-10T02:16:00+05:30/references/coverage/coverage_sso-admin/2023-10-16T08:43:15+02:00/tags/stack-insights/2023-02-20T23:11:36+01:00/tags/static-website/2023-08-17T22:23:40+05:30/user-guide/aws/stepfunctions/2023-09-02T00:12:48+05:30/applications/step-up-authentication-using-amazon-cognito/2023-06-28T15:22:44+05:00/tags/step-up-auth/2023-06-28T15:22:44+05:00/references/coverage/coverage_stepfunctions/2023-03-20T14:38:19+01:00/references/coverage/coverage_sts/2023-03-20T14:38:19+01:00/references/coverage/coverage_support/2023-03-20T14:38:19+01:00/user-guide/aws/support/2023-08-30T15:39:42+05:30/references/coverage/coverage_swf/2023-03-20T14:38:19+01:00/user-guide/aws/systems-manager/2023-09-11T15:14:44+05:30/tags/terraform/2023-08-17T22:23:40+05:30/tags/testing/2023-05-04T11:45:00+05:30/tags/tflocal-cli/2023-08-17T22:23:40+05:30/user-guide/aws/timestream/2023-07-20T15:44:07+02:00/references/coverage/coverage_timestream-query/2023-03-20T14:38:19+01:00/references/coverage/coverage_timestream-write/2023-03-20T14:38:19+01:00/categories/tools/2023-09-29T12:57:11+01:00/references/coverage/coverage_transcribe/2023-03-20T14:38:19+01:00/user-guide/aws/transcribe/2023-09-27T11:21:47+02:00/references/coverage/coverage_transfer/2023-03-20T14:38:19+01:00/user-guide/aws/transfer/2023-09-11T18:22:02-05:00/tags/troubleshooting/2023-09-29T12:57:11+01:00/user-guide/aws/xray/2023-09-18T08:38:19+02:00/references/coverage/coverage_xray/2023-03-20T14:38:19+01:00 \ No newline at end of file diff --git a/user-guide/aws/index.xml b/user-guide/aws/index.xml index d32e59ae9e..ca8c1132ce 100644 --- a/user-guide/aws/index.xml +++ b/user-guide/aws/index.xml @@ -11439,18 +11439,246 @@ Run the following command to create a Neptune instance:</p> <p>The <code>CustomEndpointOptions</code> in LocalStack offers the flexibility to utilize arbitrary endpoint URLs, a feature that diverges from the constraints imposed by AWS.</p> <h2 id="troubleshooting">Troubleshooting</h2> <p>If you encounter difficulties resolving subdomains while employing the <code>OPENSEARCH_ENDPOINT_STRATEGY=domain</code> (the default setting), it&rsquo;s advisable to investigate whether your DNS configuration might be obstructing rebind queries. For further insights on addressing this issue, refer to the section on <a href="/user-guide/tools/transparent-endpoint-injection/dns-server/#dns-rebind-protection">DNS rebind protection</a>.</p>User-Guide: Quantum Ledger Database (QLDB)/user-guide/aws/qldb/Mon, 01 Jan 0001 00:00:00 +0000/user-guide/aws/qldb/ -<p>The Quantum Ledger Database (QLDB) API supports queries over cryptographically verifiable data, stored in a journal of immutable transaction events. LocalStack allows to create local ledgers and journals, to perform <code>CREATE TABLE</code> statements, to insert data via <code>INSERT</code> statements, and to query data via <code>SELECT</code> statements.</p> -<p>QLDB uses the <a href="https://amzn.github.io/ion-docs">Amazon ION data format</a>, a data serialization format that represents a superset of JSON, with a number of additional features.</p> -<p>A simple QLDB example running on LocalStack is provided in <a href="https://github.com/localstack/localstack-pro-samples/tree/master/qldb-ledger-queries">this Github repository</a>. The sample consists of two simple scenarios: (1) to create and list tables via the <code>pyqldb</code> Python library, and (2) to insert data into two tables and perform a <code>JOIN</code> query that combines data from the two tables. The sample output is posted below:</p> -<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-plaintext" data-lang="plaintext"><span style="display:flex;"><span>Scenario 1: create and list tables in ledger -</span></span><span style="display:flex;"><span>----------- -</span></span><span style="display:flex;"><span>Creating new test ledger in QLDB API: ledger-test-1 -</span></span><span style="display:flex;"><span>Creating two test tables in ledger -</span></span><span style="display:flex;"><span>Retrieved list of tables in ledger ledger-test-1: [&#39;foobar1&#39;, &#39;foobar2&#39;] -</span></span><span style="display:flex;"><span>----------- -</span></span><span style="display:flex;"><span>Scenario 2: create ledger tables and run join query -</span></span><span style="display:flex;"><span>----------- -</span></span><span style="display:flex;"><span>Creating two test tables in ledger - &#34;Vehicle&#34; and &#34;VehicleRegistration&#34; -</span></span><span style="display:flex;"><span>Running a query that joins data from the two tables -</span></span><span style="display:flex;"><span>Query result: [{&#39;Vehicle&#39;: {&#39;id&#39;: &#39;v1&#39;}}, {&#39;Vehicle&#39;: {&#39;id&#39;: &#39;v2&#39;}}, {&#39;Vehicle&#39;: {&#39;id&#39;: &#39;v3&#39;}}] -</span></span></code></pre></div> \ No newline at end of file +<h2 id="introduction">Introduction</h2> +<p>Quantum Ledger Database (QLDB) is supported by LocalStack only in the Pro version.</p> +<p>Amazon Quantum Ledger Database is a fully managed ledger database service offered by Amazon Web +Services. It is designed to provide transparent, immutable, and cryptographically verifiable +transaction +log functionality to applications. QLDB is particularly useful for applications that need a secure +and scalable +way to maintain a complete and verifiable history of data changes over time.</p> +<p>To learn more about QLDB please refer to +the <a href="https://docs.aws.amazon.com/qldb/">official documentation</a>. +To find out what operations are supported by the QLDB service on LocalStack, please check +the <a href="/references/coverage/coverage_qldb/" title="QLDB +service coverage page">QLDB service coverage page</a>.</p> +<h2 id="getting-started">Getting started</h2> +<p>These instructions will follow along with +the <a href="https://docs.aws.amazon.com/qldb/latest/developerguide/getting-started.html">getting started guide</a> +from the official documentation, but instead of using the console to +perform all the operations, the LocalStack AWS CLI (management API only) and the QLDB shell (data +API only) will be used.</p> +<h3 id="installing-the-qldb-shell">Installing the QLDB shell</h3> +<p>QLDB supports PartiQL, a SQL-compatible query language, which allows you to query and manipulate +data stored in QLDB. +You can write PartiQL statements to perform complex queries, aggregations, and transformations on +your data. +Amazon QLDB provides a command line shell for interaction with the transactional data API. With the +QLDB shell, +you can run PartiQL statements on ledger data.</p> +<p>For instructions on how to use and install the latest version of the QLDB shell, see +the <a href="https://github.com/awslabs/amazon-qldb-shell/blob/main/README.md#installation">README.md</a> file +on GitHub. +QLDB provides pre-built binary files for Linux, macOS, and Windows in +the <a href="https://github.com/awslabs/amazon-qldb-shell/releases">Releases</a> section of the repository.</p> +<h3 id="creating-a-new-ledger">Creating a new ledger</h3> +<p>QLDB provides ledger databases, which are centralized, immutable, and cryptographically verifiable +journals of transactions.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>awslocal qldb create-ledger --name vehicle-registration --permissions-mode ALLOW_ALL</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Name&#34;</span>: <span style="color:#4e9a06">&#34;vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Arn&#34;</span>: <span style="color:#4e9a06">&#34;arn:aws:qldb:us-east-1:000000000000:ledger/vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;State&#34;</span>: <span style="color:#4e9a06">&#34;ACTIVE&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;CreationDateTime&#34;</span>: 1696782718.0, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;PermissionsMode&#34;</span>: <span style="color:#4e9a06">&#34;ALLOW_ALL&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;DeletionProtection&#34;</span>: <span style="color:#204a87">true</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span></code></pre></div> +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">Note</h4> +<ul> +<li>Permissions mode – the following options are available in AWS:</li> +</ul> +<p><strong>Allow all</strong> – A legacy permissions mode that enables access control with API-level granularity for +ledgers. +This mode disregards any table-level or command-level IAM permissions policies that you create for +the ledger.</p> +<p><strong>Standard</strong> (Recommended) - A permissions mode that enables access control with finer granularity +for ledgers, +tables, and PartiQL commands. It is recommended using this permissions mode to maximize the security +of your +ledger data. +By default, this mode denies all requests to run any PartiQL commands on any tables in this ledger. +To allow PartiQL +commands, you must create IAM permissions policies for specific table resources and PartiQL actions, +in addition to +the <code>SendCommand</code> API permission for the ledger.</p> +</div> +<p>The following command can be used directly to write PartiQL statements against a QLDB ledger:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>qldb --qldb-session-endpoint http://localhost:4566 --ledger vehicle-registration</span></span></code></pre></div> +<p>The user can continue from here to create tables, populate and interrogate them.</p> +<h3 id="creating-tables-and-sample-data">Creating tables and sample data</h3> +<p>PartiQL is a query language designed for processing structured data, allowing you to perform +various data manipulation tasks using familiar SQL-like syntax.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; CREATE TABLE VehicleRegistration</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> information_schema: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> user_tables: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> name: <span style="color:#4e9a06">&#34;VehicleRegistration&#34;</span>, +</span></span><span style="display:flex;"><span> status: <span style="color:#4e9a06">&#34;ACTIVE&#34;</span>, +</span></span><span style="display:flex;"><span> indexes: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> Vehicle: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span>, +</span></span><span style="display:flex;"><span> VehicleRegistration: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 31ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><p>The <code>VehicleRegistration</code> table was created. Now it&rsquo;s time to add some items:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; INSERT INTO VehicleRegistration VALUE +</span></span><span style="display:flex;"><span>{ +</span></span><span style="display:flex;"><span> &#39;VIN&#39; : &#39;KM8SRDHF6EU074761&#39;, +</span></span><span style="display:flex;"><span> &#39;RegNum&#39; : 1722, +</span></span><span style="display:flex;"><span> &#39;State&#39; : &#39;WA&#39;, +</span></span><span style="display:flex;"><span> &#39;City&#39; : &#39;Kent&#39;, +</span></span><span style="display:flex;"><span> &#39;PendingPenaltyTicketAmount&#39; : 130.75, +</span></span><span style="display:flex;"><span> &#39;Owners&#39; : { +</span></span><span style="display:flex;"><span> &#39;PrimaryOwner&#39; : { &#39;PersonId&#39;: &#39;294jJ3YUoH1IEEm8GSabOs&#39; }, +</span></span><span style="display:flex;"><span> &#39;SecondaryOwners&#39; : [ +</span></span><span style="display:flex;"><span> { &#39;PersonId&#39; : &#39;1nmeDdLo3AhGswBtyM1eYh&#39; }, +</span></span><span style="display:flex;"><span> { &#39;PersonId&#39;: &#39;IN7MvYtUjkp1GMZu0F6CG9&#39; } +</span></span><span style="display:flex;"><span> ] +</span></span><span style="display:flex;"><span> }, +</span></span><span style="display:flex;"><span> &#39;ValidFromDate&#39; : `2017-09-14T`, +</span></span><span style="display:flex;"><span> &#39;ValidToDate&#39; : `2020-06-25T` +</span></span><span style="display:flex;"><span>}</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span>documentId: <span style="color:#4e9a06">&#34;3TYR9BamzyqHWBjYOfHegE&#34;</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 894ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="querying-a-table">Querying a table</h3> +<p>The table can be interrogated based on the inserted registration number:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT * FROM VehicleRegistration WHERE RegNum=1722</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;VIN&#39;</span> : <span style="color:#4e9a06">&#39;KM8SRDHF6EU074761&#39;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;RegNum&#39;</span> : 1722, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;State&#39;</span> : <span style="color:#4e9a06">&#39;WA&#39;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;City&#39;</span> : <span style="color:#4e9a06">&#39;Kent&#39;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;PendingPenaltyTicketAmount&#39;</span> : 130.75, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;Owners&#39;</span> : <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;PrimaryOwner&#39;</span> : <span style="color:#ce5c00;font-weight:bold">{</span> <span style="color:#4e9a06">&#39;PersonId&#39;</span>: <span style="color:#4e9a06">&#39;294jJ3YUoH1IEEm8GSabOs&#39;</span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;SecondaryOwners&#39;</span> : <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> <span style="color:#4e9a06">&#39;PersonId&#39;</span> : <span style="color:#4e9a06">&#39;1nmeDdLo3AhGswBtyM1eYh&#39;</span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> <span style="color:#4e9a06">&#39;PersonId&#39;</span>: <span style="color:#4e9a06">&#39;IN7MvYtUjkp1GMZu0F6CG9&#39;</span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;ValidFromDate&#39;</span> : <span style="color:#4e9a06">`</span>2017-09-14T<span style="color:#4e9a06">`</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;ValidToDate&#39;</span> : <span style="color:#4e9a06">`</span>2020-06-25T<span style="color:#4e9a06">`</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 477ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="modifying-documents-in-a-ledger">Modifying documents in a ledger</h3> +<p>Additional changes can be made to documents in the <code>vehicle-registration</code> ledger with more complex +queries. +Supposed the vehicle is sold and changes owners, this information needs to be updated with a new +person ID.</p> +<p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; UPDATE VehicleRegistration AS r SET r.Owners.PrimaryOwner.PersonId = &#39;112233445566NO&#39; WHERE r.VIN = &#39;KM8SRDHF6EU074761&#39;</span></span></code></pre></div> +The command will return the updated document ID.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> documentId: <span style="color:#4e9a06">&#34;3TYR9BamzyqHWBjYOfHegE&#34;</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 62ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><p>The next step is to check on the updates made to the <code>PersonId</code> field of the <code>PrimaryOwner</code>: +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT r.Owners FROM VehicleRegistration AS r WHERE r.VIN = &#39;KM8SRDHF6EU074761&#39;</span></span></code></pre></div> +</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> Owners: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PrimaryOwner: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;112233445566NO&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> SecondaryOwners: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;1nmeDdLo3AhGswBtyM1eYh&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;IN7MvYtUjkp1GMZu0F6CG9&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 518ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="viewing-the-revision-history-of-a-document">Viewing the revision history of a document</h3> +<p>After modifying the data in a document, the user can query the history of the entity. +You can see all revisions of a document that you inserted, updated, and deleted by querying the +built-in History function. +First the unique <code>id</code> of the document must be found.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT r_id FROM VehicleRegistration AS r BY r_id WHERE r.VIN = &#39;KM8SRDHF6EU074761&#39;</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span>r_id: <span style="color:#4e9a06">&#34;3TYR9BamzyqHWBjYOfHegE&#34;</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">1</span> document in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 541ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><p>Then, the <code>id</code> is used to query the history function.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>qldb&gt; SELECT h.data.VIN, h.data.City, h.data.Owners FROM history(VehicleRegistration) AS h WHERE h.metadata.id = &#39;3TYR9BamzyqHWBjYOfHegE&#39;</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> VIN: <span style="color:#4e9a06">&#34;KM8SRDHF6EU074761&#34;</span>, +</span></span><span style="display:flex;"><span> City: <span style="color:#4e9a06">&#34;Kent&#34;</span>, +</span></span><span style="display:flex;"><span> Owners: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PrimaryOwner: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;294jJ3YUoH1IEEm8GSabOs&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> SecondaryOwners: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;1nmeDdLo3AhGswBtyM1eYh&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;IN7MvYtUjkp1GMZu0F6CG9&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> VIN: <span style="color:#4e9a06">&#34;KM8SRDHF6EU074761&#34;</span>, +</span></span><span style="display:flex;"><span> City: <span style="color:#4e9a06">&#34;Kent&#34;</span>, +</span></span><span style="display:flex;"><span> Owners: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PrimaryOwner: <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;112233445566NO&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> SecondaryOwners: <span style="color:#ce5c00;font-weight:bold">[</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;1nmeDdLo3AhGswBtyM1eYh&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span>, +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> PersonId: <span style="color:#4e9a06">&#34;IN7MvYtUjkp1GMZu0F6CG9&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">]</span> +</span></span><span style="display:flex;"><span> <span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span><span style="display:flex;"><span><span style="color:#0000cf;font-weight:bold">2</span> documents in bag <span style="color:#ce5c00;font-weight:bold">(</span>read-ios: 0, server-time: 0ms, total-time: 544ms<span style="color:#ce5c00;font-weight:bold">)</span> +</span></span></code></pre></div><h3 id="cleaning-up-resources">Cleaning up resources</h3> +<p>Unused ledgers can be deleted. You&rsquo;ll notice that directly running the following command will lead +to an error message.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>awslocal qldb delete-ledger --name vehicle-registration</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>An error occurred <span style="color:#ce5c00;font-weight:bold">(</span>ResourcePreconditionNotMetException<span style="color:#ce5c00;font-weight:bold">)</span> when calling the DeleteLedger operation: Preventing deletion +</span></span><span style="display:flex;"><span>of ledger vehicle-registration with DeletionProtection enabled +</span></span></code></pre></div><p>This can be adjusted using the <code>update-ledger</code> command in the AWS CLI to remove the deletion protection of the ledger:</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span><span class="command-prefix">$ </span>awslocal qldb update-ledger --name vehicle-registration --no-deletion-protection</span></span></code></pre></div> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">{</span> +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Name&#34;</span>: <span style="color:#4e9a06">&#34;vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;Arn&#34;</span>: <span style="color:#4e9a06">&#34;arn:aws:qldb:us-east-1:000000000000:ledger/vehicle-registration&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;State&#34;</span>: <span style="color:#4e9a06">&#34;ACTIVE&#34;</span>, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;CreationDateTime&#34;</span>: 1697038061.0, +</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;DeletionProtection&#34;</span>: <span style="color:#204a87">false</span> +</span></span><span style="display:flex;"><span><span style="color:#ce5c00;font-weight:bold">}</span> +</span></span></code></pre></div><p>Now the <code>delete-ledger</code> command can be repeated without errors.</p> +<h3 id="examples">Examples</h3> +<p>Interacting with Amazon QLDB (Quantum Ledger Database) is typically done using language-specific +software +development kits (SDKs) provided by AWS. These SDKs make it easier for developers to interact with +QLDB and +perform operations such as managing ledgers, executing PartiQL queries, and processing the results. +When interacting with QLDB, it&rsquo;s common to use a combination of SDKs and PartiQL queries to achieve +specific data +processing tasks, ensuring flexibility and ease of development.</p> +<p>A simple QLDB example running on LocalStack is provided +in <a href="https://github.com/localstack/localstack-pro-samples/tree/master/qldb-ledger-queries">this Github repository</a> +. +The sample consists of two simple scenarios:</p> +<ol> +<li>Create and list tables via the <code>pyqldb</code> Python library.</li> +<li>Insert data into two tables and perform a <code>JOIN</code> query that combines data from the two tables.</li> +</ol> \ No newline at end of file diff --git a/user-guide/aws/qldb/index.html b/user-guide/aws/qldb/index.html index bfb7d5b9d1..6772fe0855 100644 --- a/user-guide/aws/qldb/index.html +++ b/user-guide/aws/qldb/index.html @@ -1,7 +1,7 @@ Quantum Ledger Database (QLDB) | Docs

Quantum Ledger Database (QLDB)

Get started with Quantum Ledger Database (QLDB) on LocalStack

The Quantum Ledger Database (QLDB) API supports queries over cryptographically verifiable data, stored in a journal of immutable transaction events. LocalStack allows to create local ledgers and journals, to perform CREATE TABLE statements, to insert data via INSERT statements, and to query data via SELECT statements.

QLDB uses the Amazon ION data format, a data serialization format that represents a superset of JSON, with a number of additional features.

A simple QLDB example running on LocalStack is provided in this Github repository. The sample consists of two simple scenarios: (1) to create and list tables via the pyqldb Python library, and (2) to insert data into two tables and perform a JOIN query that combines data from the two tables. The sample output is posted below:

Scenario 1: create and list tables in ledger
------------
-Creating new test ledger in QLDB API: ledger-test-1
-Creating two test tables in ledger
-Retrieved list of tables in ledger ledger-test-1: ['foobar1', 'foobar2']
------------
-Scenario 2: create ledger tables and run join query
------------
-Creating two test tables in ledger - "Vehicle" and "VehicleRegistration"
-Running a query that joins data from the two tables
-Query result: [{'Vehicle': {'id': 'v1'}}, {'Vehicle': {'id': 'v2'}}, {'Vehicle': {'id': 'v3'}}]
-

+ Create project issue
Table of Contents

Quantum Ledger Database (QLDB)

Get started with Quantum Ledger Database (QLDB) on LocalStack

Introduction

Quantum Ledger Database (QLDB) is supported by LocalStack only in the Pro version.

Amazon Quantum Ledger Database is a fully managed ledger database service offered by Amazon Web +Services. It is designed to provide transparent, immutable, and cryptographically verifiable +transaction +log functionality to applications. QLDB is particularly useful for applications that need a secure +and scalable +way to maintain a complete and verifiable history of data changes over time.

To learn more about QLDB please refer to +the official documentation. +To find out what operations are supported by the QLDB service on LocalStack, please check +the QLDB service coverage page.

Getting started

These instructions will follow along with +the getting started guide +from the official documentation, but instead of using the console to +perform all the operations, the LocalStack AWS CLI (management API only) and the QLDB shell (data +API only) will be used.

Installing the QLDB shell

QLDB supports PartiQL, a SQL-compatible query language, which allows you to query and manipulate +data stored in QLDB. +You can write PartiQL statements to perform complex queries, aggregations, and transformations on +your data. +Amazon QLDB provides a command line shell for interaction with the transactional data API. With the +QLDB shell, +you can run PartiQL statements on ledger data.

For instructions on how to use and install the latest version of the QLDB shell, see +the README.md file +on GitHub. +QLDB provides pre-built binary files for Linux, macOS, and Windows in +the Releases section of the repository.

Creating a new ledger

QLDB provides ledger databases, which are centralized, immutable, and cryptographically verifiable +journals of transactions.

$ awslocal qldb create-ledger --name vehicle-registration --permissions-mode ALLOW_ALL
{
+    "Name": "vehicle-registration",
+    "Arn": "arn:aws:qldb:us-east-1:000000000000:ledger/vehicle-registration",
+    "State": "ACTIVE",
+    "CreationDateTime": 1696782718.0,
+    "PermissionsMode": "ALLOW_ALL",
+    "DeletionProtection": true
+}
+

The following command can be used directly to write PartiQL statements against a QLDB ledger:

$ qldb --qldb-session-endpoint http://localhost:4566 --ledger vehicle-registration

The user can continue from here to create tables, populate and interrogate them.

Creating tables and sample data

PartiQL is a query language designed for processing structured data, allowing you to perform +various data manipulation tasks using familiar SQL-like syntax.

qldb> CREATE TABLE VehicleRegistration
{
+    information_schema: {
+      user_tables: [
+        {
+          name: "VehicleRegistration",
+          status: "ACTIVE",
+          indexes: [
+         ]
+        }
+      ]
+    },
+   Vehicle: [
+   ],
+   VehicleRegistration: [
+   ]
+}
+1 document in bag (read-ios: 0, server-time: 0ms, total-time: 31ms)
+

The VehicleRegistration table was created. Now it’s time to add some items:

qldb> INSERT INTO VehicleRegistration VALUE
+{
+    'VIN' : 'KM8SRDHF6EU074761',
+    'RegNum' : 1722,
+    'State' : 'WA',
+    'City' : 'Kent',
+    'PendingPenaltyTicketAmount' : 130.75,
+    'Owners' : {
+        'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' },
+        'SecondaryOwners' : [
+            { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' },
+            { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' }
+        ]
+    },
+    'ValidFromDate' : `2017-09-14T`,
+    'ValidToDate' : `2020-06-25T`
+}
{
+documentId: "3TYR9BamzyqHWBjYOfHegE"
+}
+1 document in bag (read-ios: 0, server-time: 0ms, total-time: 894ms)
+

Querying a table

The table can be interrogated based on the inserted registration number:

qldb> SELECT * FROM VehicleRegistration WHERE RegNum=1722
{
+    'VIN' : 'KM8SRDHF6EU074761',
+    'RegNum' : 1722,
+    'State' : 'WA',
+    'City' : 'Kent',
+    'PendingPenaltyTicketAmount' : 130.75,
+    'Owners' : {
+        'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' },
+        'SecondaryOwners' : [
+            { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' },
+            { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' }
+        ]
+    },
+    'ValidFromDate' : `2017-09-14T`,
+    'ValidToDate' : `2020-06-25T`
+}
+1 document in bag (read-ios: 0, server-time: 0ms, total-time: 477ms)
+

Modifying documents in a ledger

Additional changes can be made to documents in the vehicle-registration ledger with more complex +queries. +Supposed the vehicle is sold and changes owners, this information needs to be updated with a new +person ID.

qldb> UPDATE VehicleRegistration AS r SET r.Owners.PrimaryOwner.PersonId = '112233445566NO' WHERE r.VIN = 'KM8SRDHF6EU074761'
The command will return the updated document ID.

{
+  documentId: "3TYR9BamzyqHWBjYOfHegE"
+}
+1 document in bag (read-ios: 0, server-time: 0ms, total-time: 62ms)
+

The next step is to check on the updates made to the PersonId field of the PrimaryOwner:

qldb> SELECT r.Owners FROM VehicleRegistration AS r WHERE r.VIN = 'KM8SRDHF6EU074761'

{
+    Owners: {
+        PrimaryOwner: {
+        PersonId: "112233445566NO"
+    },
+    SecondaryOwners: [
+        {
+            PersonId: "1nmeDdLo3AhGswBtyM1eYh"
+        },
+        {
+            PersonId: "IN7MvYtUjkp1GMZu0F6CG9"
+        }
+    ]
+    }
+}
+1 document in bag (read-ios: 0, server-time: 0ms, total-time: 518ms)
+

Viewing the revision history of a document

After modifying the data in a document, the user can query the history of the entity. +You can see all revisions of a document that you inserted, updated, and deleted by querying the +built-in History function. +First the unique id of the document must be found.

qldb> SELECT r_id FROM VehicleRegistration AS r BY r_id WHERE r.VIN = 'KM8SRDHF6EU074761'
{
+r_id: "3TYR9BamzyqHWBjYOfHegE"
+}
+
+1 document in bag (read-ios: 0, server-time: 0ms, total-time: 541ms)
+

Then, the id is used to query the history function.

qldb> SELECT h.data.VIN, h.data.City, h.data.Owners FROM history(VehicleRegistration) AS h WHERE h.metadata.id = '3TYR9BamzyqHWBjYOfHegE'
{
+  VIN: "KM8SRDHF6EU074761",
+  City: "Kent",
+  Owners: {
+    PrimaryOwner: {
+      PersonId: "294jJ3YUoH1IEEm8GSabOs"
+    },
+    SecondaryOwners: [
+    {
+      PersonId: "1nmeDdLo3AhGswBtyM1eYh"
+    },
+    {
+      PersonId: "IN7MvYtUjkp1GMZu0F6CG9"
+    }
+    ]
+  }
+},
+{
+  VIN: "KM8SRDHF6EU074761",
+  City: "Kent",
+  Owners: {
+    PrimaryOwner: {
+      PersonId: "112233445566NO"
+    },
+    SecondaryOwners: [
+    {
+      PersonId: "1nmeDdLo3AhGswBtyM1eYh"
+    },
+    {
+      PersonId: "IN7MvYtUjkp1GMZu0F6CG9"
+    }
+    ]
+  }
+}
+2 documents in bag (read-ios: 0, server-time: 0ms, total-time: 544ms)
+

Cleaning up resources

Unused ledgers can be deleted. You’ll notice that directly running the following command will lead +to an error message.

$ awslocal qldb delete-ledger --name vehicle-registration
An error occurred (ResourcePreconditionNotMetException) when calling the DeleteLedger operation: Preventing deletion 
+of ledger vehicle-registration with DeletionProtection enabled
+

This can be adjusted using the update-ledger command in the AWS CLI to remove the deletion protection of the ledger:

$ awslocal qldb update-ledger --name vehicle-registration --no-deletion-protection
{
+  "Name": "vehicle-registration",
+  "Arn": "arn:aws:qldb:us-east-1:000000000000:ledger/vehicle-registration",
+  "State": "ACTIVE",
+  "CreationDateTime": 1697038061.0,
+  "DeletionProtection": false
+}
+

Now the delete-ledger command can be repeated without errors.

Examples

Interacting with Amazon QLDB (Quantum Ledger Database) is typically done using language-specific +software +development kits (SDKs) provided by AWS. These SDKs make it easier for developers to interact with +QLDB and +perform operations such as managing ledgers, executing PartiQL queries, and processing the results. +When interacting with QLDB, it’s common to use a combination of SDKs and PartiQL queries to achieve +specific data +processing tasks, ensuring flexibility and ease of development.

A simple QLDB example running on LocalStack is provided +in this Github repository +. +The sample consists of two simple scenarios:

  1. Create and list tables via the pyqldb Python library.
  2. Insert data into two tables and perform a JOIN query that combines data from the two tables.

Last modified October 20, 2023: enhance QLDB docs (#853) (11bda9423)
\ No newline at end of file