Fase 1: Creare un nuovo registro - Database Amazon Quantum Ledger (Amazon) QLDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Fase 1: Creare un nuovo registro

Importante

Avviso di fine del supporto: i clienti esistenti potranno utilizzare Amazon QLDB fino alla fine del supporto il 31/07/2025. Per ulteriori dettagli, consulta Migrare un Amazon QLDB Ledger ad Amazon Aurora Postgre. SQL

In questo passaggio, crei un nuovo QLDB registro Amazon denominatovehicle-registration.

Per creare un nuovo libro mastro
  1. Esamina il seguente file (Constants.java), che contiene valori costanti utilizzati da tutti gli altri programmi di questo tutorial.

    2.x
    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazon.ion.IonSystem; import com.amazon.ion.system.IonSystemBuilder; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.ion.IonObjectMapper; import com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueMapper; /** * Constant values used throughout this tutorial. */ public final class Constants { public static final int RETRY_LIMIT = 4; public static final String LEDGER_NAME = "vehicle-registration"; public static final String STREAM_NAME = "vehicle-registration-stream"; public static final String VEHICLE_REGISTRATION_TABLE_NAME = "VehicleRegistration"; public static final String VEHICLE_TABLE_NAME = "Vehicle"; public static final String PERSON_TABLE_NAME = "Person"; public static final String DRIVERS_LICENSE_TABLE_NAME = "DriversLicense"; public static final String VIN_INDEX_NAME = "VIN"; public static final String PERSON_GOV_ID_INDEX_NAME = "GovId"; public static final String VEHICLE_REGISTRATION_LICENSE_PLATE_NUMBER_INDEX_NAME = "LicensePlateNumber"; public static final String DRIVER_LICENSE_NUMBER_INDEX_NAME = "LicenseNumber"; public static final String DRIVER_LICENSE_PERSONID_INDEX_NAME = "PersonId"; public static final String JOURNAL_EXPORT_S3_BUCKET_NAME_PREFIX = "qldb-tutorial-journal-export"; public static final String USER_TABLES = "information_schema.user_tables"; public static final String LEDGER_NAME_WITH_TAGS = "tags"; public static final IonSystem SYSTEM = IonSystemBuilder.standard().build(); public static final IonObjectMapper MAPPER = new IonValueMapper(SYSTEM); private Constants() { } static { MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); } }
    1.x
    Importante

    Per il pacchetto Amazon Ion, devi utilizzare lo spazio dei nomi com.amazon.ion nella tua applicazione. AWS SDK for Java Dipende da un altro pacchetto Ion presente nello spazio dei nomisoftware.amazon.ion, ma si tratta di un pacchetto legacy non compatibile con il driver. QLDB

    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazon.ion.IonSystem; import com.amazon.ion.system.IonSystemBuilder; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.ion.IonObjectMapper; import com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueMapper; /** * Constant values used throughout this tutorial. */ public final class Constants { public static final int RETRY_LIMIT = 4; public static final String LEDGER_NAME = "vehicle-registration"; public static final String STREAM_NAME = "vehicle-registration-stream"; public static final String VEHICLE_REGISTRATION_TABLE_NAME = "VehicleRegistration"; public static final String VEHICLE_TABLE_NAME = "Vehicle"; public static final String PERSON_TABLE_NAME = "Person"; public static final String DRIVERS_LICENSE_TABLE_NAME = "DriversLicense"; public static final String VIN_INDEX_NAME = "VIN"; public static final String PERSON_GOV_ID_INDEX_NAME = "GovId"; public static final String VEHICLE_REGISTRATION_LICENSE_PLATE_NUMBER_INDEX_NAME = "LicensePlateNumber"; public static final String DRIVER_LICENSE_NUMBER_INDEX_NAME = "LicenseNumber"; public static final String DRIVER_LICENSE_PERSONID_INDEX_NAME = "PersonId"; public static final String JOURNAL_EXPORT_S3_BUCKET_NAME_PREFIX = "qldb-tutorial-journal-export"; public static final String USER_TABLES = "information_schema.user_tables"; public static final String LEDGER_NAME_WITH_TAGS = "tags"; public static final IonSystem SYSTEM = IonSystemBuilder.standard().build(); public static final IonObjectMapper MAPPER = new IonValueMapper(SYSTEM); private Constants() { } static { MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); } }
    Nota

    Questa Constants classe include un'istanza della classe Jackson open source. IonValueMapper Puoi utilizzare questo mappatore per elaborare i dati di Amazon Ion durante le transazioni di lettura e scrittura.

    Il CreateLedger.java file dipende anche dal seguente programma (DescribeLedger.java), che descrive lo stato attuale del registro.

    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazonaws.services.qldb.AmazonQLDB; import com.amazonaws.services.qldb.model.DescribeLedgerRequest; import com.amazonaws.services.qldb.model.DescribeLedgerResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Describe a QLDB ledger. * * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class DescribeLedger { public static AmazonQLDB client = CreateLedger.getClient(); public static final Logger log = LoggerFactory.getLogger(DescribeLedger.class); private DescribeLedger() { } public static void main(final String... args) { try { describe(Constants.LEDGER_NAME); } catch (Exception e) { log.error("Unable to describe a ledger!", e); } } /** * Describe a ledger. * * @param name * Name of the ledger to describe. * @return {@link DescribeLedgerResult} from QLDB. */ public static DescribeLedgerResult describe(final String name) { log.info("Let's describe ledger with name: {}...", name); DescribeLedgerRequest request = new DescribeLedgerRequest().withName(name); DescribeLedgerResult result = client.describeLedger(request); log.info("Success. Ledger description: {}", result); return result; } }
  2. Compila ed esegui il CreateLedger.java programma per creare un libro mastro denominato. vehicle-registration

    2.x
    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.qldb.AmazonQLDB; import com.amazonaws.services.qldb.AmazonQLDBClientBuilder; import com.amazonaws.services.qldb.model.CreateLedgerRequest; import com.amazonaws.services.qldb.model.CreateLedgerResult; import com.amazonaws.services.qldb.model.DescribeLedgerResult; import com.amazonaws.services.qldb.model.LedgerState; import com.amazonaws.services.qldb.model.PermissionsMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Create a ledger and wait for it to be active. * <p> * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class CreateLedger { public static final Logger log = LoggerFactory.getLogger(CreateLedger.class); public static final Long LEDGER_CREATION_POLL_PERIOD_MS = 10_000L; public static String endpoint = null; public static String region = null; public static AmazonQLDB client = getClient(); private CreateLedger() { } /** * Build a low-level QLDB client. * * @return {@link AmazonQLDB} control plane client. */ public static AmazonQLDB getClient() { AmazonQLDBClientBuilder builder = AmazonQLDBClientBuilder.standard(); if (null != endpoint && null != region) { builder.setEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, region)); } return builder.build(); } public static void main(final String... args) throws Exception { try { client = getClient(); create(Constants.LEDGER_NAME); waitForActive(Constants.LEDGER_NAME); } catch (Exception e) { log.error("Unable to create the ledger!", e); throw e; } } /** * Create a new ledger with the specified ledger name. * * @param ledgerName Name of the ledger to be created. * @return {@link CreateLedgerResult} from QLDB. */ public static CreateLedgerResult create(final String ledgerName) { log.info("Let's create the ledger with name: {}...", ledgerName); CreateLedgerRequest request = new CreateLedgerRequest() .withName(ledgerName) .withPermissionsMode(PermissionsMode.ALLOW_ALL); CreateLedgerResult result = client.createLedger(request); log.info("Success. Ledger state: {}.", result.getState()); return result; } /** * Wait for a newly created ledger to become active. * * @param ledgerName Name of the ledger to wait on. * @return {@link DescribeLedgerResult} from QLDB. * @throws InterruptedException if thread is being interrupted. */ public static DescribeLedgerResult waitForActive(final String ledgerName) throws InterruptedException { log.info("Waiting for ledger to become active..."); while (true) { DescribeLedgerResult result = DescribeLedger.describe(ledgerName); if (result.getState().equals(LedgerState.ACTIVE.name())) { log.info("Success. Ledger is active and ready to use."); return result; } log.info("The ledger is still creating. Please wait..."); Thread.sleep(LEDGER_CREATION_POLL_PERIOD_MS); } } }
    1.x
    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazonaws.services.qldb.AmazonQLDB; import com.amazonaws.services.qldb.AmazonQLDBClientBuilder; import com.amazonaws.services.qldb.model.CreateLedgerRequest; import com.amazonaws.services.qldb.model.CreateLedgerResult; import com.amazonaws.services.qldb.model.DescribeLedgerResult; import com.amazonaws.services.qldb.model.LedgerState; import com.amazonaws.services.qldb.model.PermissionsMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Create a ledger and wait for it to be active. * * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class CreateLedger { public static final Logger log = LoggerFactory.getLogger(CreateLedger.class); public static final Long LEDGER_CREATION_POLL_PERIOD_MS = 10_000L; public static AmazonQLDB client = getClient(); private CreateLedger() { } /** * Build a low-level QLDB client. * * @return {@link AmazonQLDB} control plane client. */ public static AmazonQLDB getClient() { return AmazonQLDBClientBuilder.standard().build(); } public static void main(final String... args) throws Exception { try { create(Constants.LEDGER_NAME); waitForActive(Constants.LEDGER_NAME); } catch (Exception e) { log.error("Unable to create the ledger!", e); throw e; } } /** * Create a new ledger with the specified ledger name. * * @param ledgerName * Name of the ledger to be created. * @return {@link CreateLedgerResult} from QLDB. */ public static CreateLedgerResult create(final String ledgerName) { log.info("Let's create the ledger with name: {}...", ledgerName); CreateLedgerRequest request = new CreateLedgerRequest() .withName(ledgerName) .withPermissionsMode(PermissionsMode.ALLOW_ALL); CreateLedgerResult result = client.createLedger(request); log.info("Success. Ledger state: {}.", result.getState()); return result; } /** * Wait for a newly created ledger to become active. * * @param ledgerName * Name of the ledger to wait on. * @return {@link DescribeLedgerResult} from QLDB. * @throws InterruptedException if thread is being interrupted. */ public static DescribeLedgerResult waitForActive(final String ledgerName) throws InterruptedException { log.info("Waiting for ledger to become active..."); while (true) { DescribeLedgerResult result = DescribeLedger.describe(ledgerName); if (result.getState().equals(LedgerState.ACTIVE.name())) { log.info("Success. Ledger is active and ready to use."); return result; } log.info("The ledger is still creating. Please wait..."); Thread.sleep(LEDGER_CREATION_POLL_PERIOD_MS); } } }
    Nota
    • Nella createLedger chiamata, è necessario specificare un nome di registro e una modalità di autorizzazione. Ti consigliamo di utilizzare la modalità STANDARD autorizzazioni per massimizzare la sicurezza dei dati del registro.

    • Quando si crea un registro, la protezione da eliminazione è abilitata per impostazione predefinita. Questa è una funzionalità QLDB che impedisce l'eliminazione dei registri da parte di qualsiasi utente. Hai la possibilità di disabilitare la protezione dall'eliminazione durante la creazione di libri contabili utilizzando QLDB API o il AWS Command Line Interface ().AWS CLI

    • Facoltativamente, puoi anche specificare dei tag da allegare al tuo libro mastro.

Per verificare la connessione al nuovo registro, procedi a. Passaggio 2: verifica la connettività al registro