Questa pagina descrive come creare un cluster AlloyDB e la relativa istanza principale.
Prima di iniziare
- Il Google Cloud progetto che utilizzi deve essere
abilitato per accedere ad AlloyDB.
- Una rete VPC nel progetto Google Cloud che stai utilizzando deve essere già configurata per l'accesso privato ai servizi ad AlloyDB.
- Devi disporre di uno di questi ruoli IAM nel
progettoGoogle Cloud che stai utilizzando:
roles/alloydb.admin
(il ruolo IAM predefinito AlloyDB Admin)roles/owner
(il ruolo IAM di base Proprietario)roles/editor
(il ruolo IAM di base Editor)
- Se non hai uno di questi ruoli, contatta l'amministratore dell'organizzazione per richiedere l'accesso.
- Devi disporre anche dell'autorizzazione
compute.networks.list
nel progettoGoogle Cloud che stai utilizzando. Per ottenere questa autorizzazione seguendo il principio del privilegio minimo, chiedi all'amministratore di concederti il ruolo Utente di rete Compute (roles/compute.networkUser
). - Per i workload di sviluppo e sandbox, considera la regione e il tipo di macchina. Se intendi utilizzare la forma con 1 vCPU, assicurati di selezionare una regione che la supporti. Per ulteriori informazioni, consulta Considerazioni sull'utilizzo di una vCPU.
Crea un nuovo cluster e un'istanza principale
Console
Vai alla pagina Cluster.
Fai clic su Crea cluster.
Scegli una configurazione del cluster. Per saperne di più sulla differenza tra le configurazioni ad alta disponibilità e di base, consulta Nodi e istanze.
Se non sai se il nuovo cluster ha bisogno di istanze del pool di lettura, scegli una delle configurazioni senza pool di lettura. Puoi aggiungere istanze del pool di lettura al cluster in un secondo momento, quando necessario.
Fai clic su Continua.
Nella sezione Configura il cluster, inserisci un ID per il cluster nel campo ID cluster.
Nel campo Password, inserisci una password iniziale per il nuovo cluster. AlloyDB assegna la password fornita all'utente del database
postgres
durante la creazione del cluster.(Facoltativo) Per impostare manualmente il flag
alloydb.iam_authentication
, deseleziona Crea un utente di database IAM. Per saperne di più, vedi Modificare un'istanza.Per impostazione predefinita, è selezionata l'opzione Crea un utente di database IAM, che esegue le seguenti operazioni:
Attiva il flag
alloydb.iam_authentication
sull'istanza principale.Crea un utente di database IAM per te.
Nel campo Versione database, seleziona la versione principale di PostgreSQL con cui vuoi che siano compatibili i server di database del cluster.
Seleziona una regione. Per i workload di sviluppo e sandbox, prendi in considerazione la forma 1 vCPU, disponibile in alcune regioni. Per ulteriori informazioni, consulta Aspetti da considerare quando si utilizza una vCPU.
Seleziona un percorso di rete.
(Facoltativo) Per applicare un intervallo di indirizzi IP specifico a questo cluster, anziché consentire ad AlloyDB di scegliere un intervallo di indirizzi IP, segui questi passaggi:
Fai clic su Mostra opzione intervallo IP allocato.
Dall'elenco Intervallo IP allocato, seleziona un intervallo di indirizzi IP.
Per maggiori informazioni su questa opzione, vedi Crea un cluster con un intervallo di indirizzi IP specifico.
(Facoltativo) Per criptare questo cluster utilizzando una chiave di crittografia gestita dal cliente (CMEK) anziché la crittografia gestita da Google, segui questi passaggi aggiuntivi:
Fai clic su Opzioni di crittografia avanzate.
Seleziona Chiave di crittografia gestita dal cliente (CMEK).
Nel menu visualizzato, seleziona una chiave gestita dal cliente.
La console Google Cloud limita questo elenco alle chiavi all'interno dello stesso progetto Google Cloud e della stessa regione del nuovo cluster. Per utilizzare una chiave non presente in questo elenco, fai clic su Non vedi la tua chiave? Inserisci il nome risorsa della chiave, quindi digita il nome risorsa della chiave nella finestra di dialogo risultante.
Tieni presente che l'utilizzo di CMEK con AlloyDB richiede una configurazione aggiuntiva. Per ulteriori informazioni, consulta Utilizzo di CMEK con AlloyDB.
Fai clic su Continua.
Configura l'istanza principale:
- Nel campo ID istanza, inserisci un ID per l'istanza principale.
Seleziona una delle seguenti serie di macchine:
- C4A (serie di macchine basate su Google Axion)
- N2 (serie di macchine basate su x86). Questa è la serie di macchine predefinita.
Seleziona un tipo di macchina.
- C4A supporta 1, 4, 8, 16, 32, 48, 64 e 72 tipi o forme di macchine.
- N2 supporta 2, 4, 8, 16, 32, 64, 96 e 128 tipi o forme di macchine.
Per saperne di più sull'utilizzo della serie di macchine C4A basate su Axion, incluso il tipo di macchina con 1 vCPU, consulta Considerazioni sull'utilizzo della serie di macchine C4A basate su Axion.
(Facoltativo) Imposta flag personalizzati per l'istanza. Per ogni segnalazione, segui questi passaggi:
- Fai clic su Aggiungi flag.
- Nell'elenco Flag nuovo database, seleziona un flag.
- Specifica un valore per il flag.
- Fai clic su Fine.
Se hai scelto un tipo di cluster senza pool di lettura, fai clic su Crea cluster.
gcloud
Per utilizzare gcloud CLI, puoi installare e inizializzare Google Cloud CLI oppure puoi utilizzare Cloud Shell.
Prima di iniziare a utilizzare AlloyDB, devi creare sia un cluster AlloyDB sia un'istanza principale.
Crea un cluster
Per creare il cluster con l'accesso ai servizi privati o Private Service Connect abilitato, utilizza il comando
gcloud alloydb clusters create
.Accesso privato ai servizi
gcloud alloydb clusters create CLUSTER_ID \ --database-version=POSTGRES_VERSION \ --password=PASSWORD \ --region=REGION_ID \ --project=PROJECT_ID \ --network=NETWORK
Private Service Connect
gcloud alloydb clusters create CLUSTER_ID \ --database-version=POSTGRES_VERSION \ --password=PASSWORD \ --region=REGION_ID \ --project=PROJECT_ID \ --enable-private-service-connect
Sostituisci quanto segue:
CLUSTER_ID
: l'ID del cluster che stai creando. Deve iniziare con una lettera minuscola e può contenere lettere minuscole, numeri e trattini.VERSION
: la versione principale di PostgreSQL con cui vuoi che siano compatibili i server di database del cluster. Scegli una delle opzioni seguenti:14
, per la compatibilità con PostgreSQL 1415
, per la compatibilità con PostgreSQL 15, che è la versione PostgreSQL predefinita supportata16
, per la compatibilità con PostgreSQL 16
PASSWORD
: la password da utilizzare per l'utentepostgres
predefinito.NETWORK
(facoltativo): il nome della rete VPC che hai configurato per l'accesso privato ai servizi ad AlloyDB. Se ometti il flag--network
, AlloyDB utilizza la retedefault
.Nel caso della rete VPC condiviso, imposta il percorso completo della rete VPC, ad esempio,
projects/cymbal-project/global/networks/shared-vpc-network
.--enable-private-service-connect
(facoltativo): imposta su per abilitare Private Service Connect come metodo di connettività per il cluster e le relative istanze.REGION_ID
: la regione in cui vuoi posizionare il cluster.
PROJECT_ID
: l'ID del progetto in cui vuoi posizionare il cluster.
Questo comando avvia un'operazione a lunga esecuzione, restituendo un ID operazione.
(Facoltativo) Per applicare un intervallo di indirizzi IP specifico a questo cluster, anziché consentire ad AlloyDB di scegliere un intervallo di indirizzi IP, fornisci il seguente argomento:
--allocated-ip-range-name=RANGE
Sostituisci
RANGE
con il nome dell'intervallo di indirizzi IP che vuoi che questo cluster utilizzi per l'accesso al servizio privato.Per saperne di più su questa opzione, consulta Crea un cluster con un intervallo di indirizzi IP specifico.
(Facoltativo) Per criptare questo cluster utilizzando una chiave di crittografia gestita dal cliente (CMEK) anziché la crittografia gestita da Google predefinita, fornisci i seguenti argomenti:
--kms-key=KEY_ID \ --kms-keyring=KEYRING_ID \ --kms-location=LOCATION_ID \ --kms-project=PROJECT_ID
Sostituisci quanto segue:
KEY_ID
: l'ID della chiave CMEK da utilizzare.KEYRING_ID
: l'ID delle chiavi automatizzate della chiave.LOCATION_ID
: l'ID della regione del portachiavi, che deve corrispondere a quella del cluster.PROJECT_ID
: l'ID del progetto del portachiavi.
Verifica che l'operazione sia riuscita.
gcloud alloydb operations describe OPERATION_ID \ --region=REGION_ID \ --project=PROJECT_ID
Sostituisci
OPERATION_ID
con l'ID operazione restituito dal passaggio precedente.
Dopo aver creato il cluster primario, devi creare un'istanza principale.
Crea un'istanza principale
Per creare un'istanza primaria, utilizza il comando gcloud alloydb instances create
.
gcloud alloydb instances create INSTANCE_ID \
--instance-type=PRIMARY \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID \
--cpu-count=CPU_COUNT \
--machine-type=MACHINE_TYPE \
--allowed-psc-projects=ALLOWED_PROJECT_LIST
Sostituisci quanto segue:
INSTANCE_ID
: l'ID dell'istanza che stai creando. Deve iniziare con una lettera minuscola e può contenere lettere minuscole, numeri e trattini.REGION_ID
: la regione in cui vuoi che si trovi l'istanza.CLUSTER_ID
: l'ID del cluster che hai creato in precedenza.PROJECT_ID
: l'ID del progetto in cui è stato creato il cluster.CPU_COUNT
: il numero di vCPU che vuoi per l'istanza.- Devi specificare
cpu_count
omachine_type
. - Se viene fornito solo
cpu_count
, viene creata un'istanza N2 con le seguenti specifiche:- 2: 2 vCPU, 16 GB di RAM
- 4: 4 vCPU, 32 GB di RAM
- 8: 8 vCPU, 64 GB di RAM
- 16: 16 vCPU, 128 GB di RAM
- 32: 32 vCPU, 256 GB di RAM
- 64: 64 vCPU, 512 GB di RAM
- 96: 96 vCPU, 768 GB di RAM
- 128: 128 vCPU, 864 GB di RAM
- Se vengono forniti sia
machine_type
checpu_count
, il valore dicpu_count
deve corrispondere al numero di vCPU specificato inmachine_type
. Ad esempio, semachine_type
èn2-highmem-4
, devi impostarecpu_count
su4
.
- Devi specificare
MACHINE_TYPE
: il tipo di macchina dell'istanza.Per la serie di macchine C4A basate su Axion, i seguenti sono valori validi:
c4a-highmem-1
c4a-highmem-4-lssd
c4a-highmem-8-lssd
c4a-highmem-16-lssd
c4a-highmem-32-lssd
c4a-highmem-48-lssd
c4a-highmem-64-lssd
c4a-highmem-72-lssd
Per la serie di macchine N2, i seguenti sono valori validi:
n2-highmem-2
n2-highmem-4
n2-highmem-8
n2-highmem-16
n2-highmem-32
n2-highmem-64
n2-highmem-96
n2-highmem-128
Quando utilizzi
machine_type
ecpu_count
insieme, i valori incpu_count
emachine_type
devono corrispondere. Ad esempio, semachine_type
èn2-highmem-4
, devi impostarecpu_count
su4
.
ALLOWED_PROJECT_LIST
: (facoltativo) se utilizzi Private Service Connect,ALLOWED_PROJECT_LIST
è l'elenco separato da virgole di ID progetto o il numero di progetto a cui vuoi consentire l'accesso all'istanza.
Terraform
Creare un cluster e un'istanza principale
Per creare un cluster e la relativa istanza principale, utilizza una risorsa Terraform.
Di seguito è riportato uno snippet di codice per la creazione di un cluster e di un'istanza principale basato sull'esempio AlloyDB instance full:
resource "google_alloydb_instance" "default" { cluster = google_alloydb_cluster.default.name instance_id = "alloydb-instance" instance_type = "PRIMARY" machine_config { cpu_count = 2 } depends_on = [google_service_networking_connection.vpc_connection] } resource "google_alloydb_cluster" "cluster_abc" { cluster_id = "alloydb-cluster" location = "us-central1" network_config { network = google_compute_network.default.id } database_version = "POSTGRES_16" initial_user { password = "alloydb-cluster" } } data "google_project" "project" {} resource "google_compute_network" "default" { name = "alloydb-network" } resource "google_compute_global_address" "private_ip_alloc" { name = "alloydb-cluster" address_type = "INTERNAL" purpose = "VPC_PEERING" prefix_length = 16 network = google_compute_network.default.id } resource "google_service_networking_connection" "vpc_connection" { network = google_compute_network.default.id service = "servicenetworking.googleapis.com" reserved_peering_ranges = [google_compute_global_address.private_ip_alloc.name] }
Questo esempio crea un'istanza N2. Per creare un'istanza C4A, utilizza il campo machine_type
nella struttura machine_config
, come mostrato nell'esempio seguente:
machine_config { machine_type = "c4a-highmem-4-lssd" }
Prepara Cloud Shell
Per applicare la configurazione Terraform in un progetto Google Cloud , prepara Cloud Shell nel seguente modo:
- Avvia Cloud Shell.
Imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni Terraform.
Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.
Prepara la directory
Ogni file di configurazione di Terraform deve avere la propria directory, chiamata anche modulo principale.
- In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome file deve essere un file TF, ad esempio
main.tf
. In questo documento, il file è denominatomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
- Copia il codice campione nel
main.tf
appena creato. (Facoltativo) Copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end. - Esamina il file
main.tf
e modifica i parametri di esempio da applicare al tuo ambiente. - Salva le modifiche.
- Inizializza Terraform. Devi effettuare questa operazione una sola volta per directory.
(Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzioneterraform init
-upgrade
:terraform init -upgrade
Applica le modifiche
- Rivedi la configurazione per verificare che gli aggiornamenti di Terraform corrispondano alle tue aspettative:
Apporta le correzioni necessarie alla configurazione.terraform plan
- Applica la configurazione di Terraform eseguendo il comando seguente e inserendo
yes
al prompt: Attendi che Terraform visualizzi il messaggioterraform apply
Apply complete!
. - Apri il tuo Google Cloud progetto per visualizzare i risultati. Nella console Google Cloud , vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.
REST v1
Crea un cluster
Questo esempio crea un cluster. Per un elenco completo dei parametri per questa chiamata, consulta Metodo: projects.locations.clusters.create. Per informazioni sulle impostazioni del cluster, vedi Visualizzare le impostazioni dei cluster e delle istanze.
Non includere informazioni sensibili o che consentono l'identificazione personale nell'ID cluster perché è visibile esternamente. Non è necessario includere l'ID progetto nel nome del cluster. Questa operazione viene eseguita automaticamente, se appropriato, ad esempio nei file di log.
Per inviare la richiesta, salva il corpo della richiesta in un file denominato cluster_request.json
:
{
"databaseVersion": "<var>DATABASE_VERSION</var>",
"initialUser": {
"user": "<var>INITIAL_USERNAME</var>",
"password": "<var>INITIAL_USER_PASSWORD</var>"
},
"labels": {
"test": "alloydb-cluster-full"
}
}
Effettua le seguenti sostituzioni:
DATABASE_VERSION
: stringa enum della versione del database, ad esempioPOSTGRES_16
.INITIAL_USERNAME
: il nome utente che utilizzi per l'utente postgres predefinito.INITIAL_USER_PASSWORD
: la password che utilizzi per l'utente postgres predefinito.
Utilizza il seguente metodo HTTP e URL:
POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters?cluster_id=CLUSTER_ID
Effettua le seguenti sostituzioni:
PROJECT_ID
: l'ID del progetto in cui vuoi che si trovi il cluster.LOCATION_ID
: l'ID della regione del cluster.CLUSTER_ID
: l'ID del cluster che crei. L'ID cluster deve iniziare con una lettera minuscola e può contenere lettere minuscole, numeri e trattini.
Puoi utilizzare il seguente comando curl per eseguire la richiesta precedente:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://alloydb.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION_ID/clusters?cluster_id=CLUSTER_ID -d @cluster_request.json
Crea un'istanza principale
Questo esempio crea un'istanza principale. Per un elenco completo dei parametri per questa chiamata, consulta Metodo: projects.locations.clusters.instances.create. Per informazioni sulle impostazioni del cluster, vedi Visualizzare le impostazioni dei cluster e delle istanze.
Non includere informazioni sensibili o che consentono l'identificazione personale nell'ID cluster, perché è visibile esternamente. Non è necessario includere l'ID progetto nel nome del cluster perché questa operazione viene eseguita automaticamente, se necessario, ad esempio nei file di log.
Per inviare la richiesta, salva il seguente corpo della richiesta in un file denominato
instance_request.json
.
{ "instance_type": "PRIMARY", "machine_config": { "cpu_count": "vCPU_COUNT" } }
Esegui la seguente sostituzione:
VCPU_COUNT
: il numero di core della CPU visibili nell'istanza che vuoi creare.
L'esempio precedente crea un'istanza N2 con le seguenti specifiche:
- 2: 2 vCPU, 16 GB di RAM
- 4: 4 vCPU, 32 GB di RAM
- 8: 8 vCPU, 64 GB di RAM
- 16: 16 vCPU, 128 GB di RAM
- 32: 32 vCPU, 256 GB di RAM
- 64: 64 vCPU, 512 GB di RAM
- 96: 96 vCPU, 768 GB di RAM
- 128: 128 vCPU, 864 GB di RAM
Per creare un'istanza C4A, utilizza il campo machine_type
anziché cpu_count
nella struttura machine_config
, come mostrato nell'esempio seguente:
machine_config: { machine_type : MACHINE_TYPE, },
Per la serie di macchine basate su Axion C4A, utilizza i seguenti valori validi:
c4a-highmem-1
c4a-highmem-4-lssd
c4a-highmem-8-lssd
c4a-highmem-16-lssd
c4a-highmem-32-lssd
c4a-highmem-48-lssd
c4a-highmem-64-lssd
c4a-highmem-72-lssd
Per la serie di macchine N2, i seguenti sono valori validi:
n2-highmem-2
n2-highmem-4
n2-highmem-8
n2-highmem-16
n2-highmem-32
n2-highmem-64
n2-highmem-96
n2-highmem-128
Utilizza il seguente metodo HTTP e URL:
POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances?instance_id=INSTANCE_ID
Effettua le seguenti sostituzioni:
PROJECT_ID
: l'ID del progetto in cui vuoi che si trovi il cluster.LOCATION_ID
: l'ID della regione del cluster.CLUSTER_ID
: l'ID del cluster che crei. L'ID deve iniziare con una lettera minuscola e può contenere lettere minuscole, numeri e trattini.INSTANCE_ID
: il nome dell'istanza primaria che vuoi creare.
Puoi utilizzare curl per eseguire la richiesta, come mostrato nell'esempio seguente:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://alloydb.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances?instance_id=INSTANCE_ID -d @instance_request.json
Clonare un cluster attivo
Per creare un clone di un cluster attivo, contenente una copia di tutti i dati del cluster di origine e in esecuzione nella stessa regione, esegui un ripristino point-in-time su quel cluster. In questo modo, puoi specificare un momento molto recente, ad esempio il primo secondo del minuto corrente.
Questo processo copia solo i dati del cluster di origine nel clone, non la configurazione del cluster di origine. Per criptare i dati del clone utilizzando CMEK, devi specificare i dettagli di CMEK come parte del comando di ripristino point-in-time, anche se i dati del cluster di origine sono già criptati con CMEK. Dopo aver creato il nuovo cluster, devi aggiungere istanze, flag di database, pianificazioni di backup e qualsiasi altra configurazione necessaria per soddisfare le tue esigenze.
Un cluster creato in questo modo esiste indipendentemente dalla sua origine e i suoi dati non hanno alcuna relazione con i dati del cluster di origine dopo il completamento della duplicazione iniziale. Se vuoi creare cluster secondari che monitorano e replicano automaticamente le modifiche ai dati apportate nei cluster di origine, vedi Informazioni sulla replica tra regioni.
Crea un cluster con un intervallo di indirizzi IP specifico
AlloyDB utilizza l'accesso ai servizi privati per consentire alle risorse interne di un cluster di comunicare tra loro. Prima di poter creare un cluster, la tua rete Virtual Private Cloud (VPC) deve contenere almeno un intervallo di indirizzi IP configurato con una connessione di accesso privato ai servizi.
Se la tua rete VPC contiene più di un intervallo di indirizzi IP configurato con l'accesso privato ai servizi, hai la possibilità di specificare l'intervallo che AlloyDB assegna a un nuovo cluster.
Per specificare un intervallo di indirizzi IP, consulta i passaggi facoltativi in Crea un cluster.
Se non specifichi un intervallo, AlloyDB esegue una delle seguenti azioni durante la creazione di un cluster:
Se hai più intervalli di indirizzi IP con accesso ai servizi privati disponibile, AlloyDB ne sceglie uno.
Se hai configurato esattamente un intervallo di indirizzi IP nel tuo VPC con l'accesso privato ai servizi, AlloyDB applica questo intervallo al nuovo cluster.
Per ulteriori informazioni sulla creazione di intervalli di indirizzi IP da utilizzare con AlloyDB, consulta Abilitare l'accesso ai servizi privati.
Considerazioni sull'utilizzo della serie di macchine C4A basate su Axion
AlloyDB offre una serie di macchine C4A basate su Google Axion, il processore personalizzato basato su Arm di Google. Le macchine virtuali (VM) C4A sono disponibili come configurazioni predefinite per 1, 4, 8, 16, 32, 48, 64 e 72 vCPU, con un massimo di 576 GB di memoria Double Data Rate 5 (DDR5).
Quando scegli C4A, tieni presente quanto segue:
- Per passare da un'istanza N2 esistente a un'istanza C4A, modifica
machine_type
dell'istanza attuale utilizzando la console Google Cloud , gcloud CLI, Terraform o l'API. - Non eliminare l'istanza N2 e crea una nuova istanza C4A nello stesso cluster.
C4A è supportato nelle seguenti regioni:
asia-east1
asia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
us-central1
us-east1
us-east4
Considerazioni sull'utilizzo del tipo di macchina con 1 vCPU
AlloyDB offre una forma con 1 vCPU con C4A ed è destinata solo a scopi di sviluppo e test. Per i workload di produzione, scegli due o più vCPU.
Quando scegli 1 vCPU, tieni presente le seguenti limitazioni:
- 1 vCPU viene offerta con 8 GB di memoria senza supporto della cache ultraveloce.
- La configurazione con 1 vCPU è consigliata per gli ambienti di sviluppo e sandbox con dimensioni del database più piccole, nell'ordine delle decine di gigabyte. Per database più grandi e per workload di produzione, valuta la possibilità di utilizzare 2 vCPU o più.
- Puoi configurare l'alta disponibilità (HA), ma non vengono offerti SLA del tempo di attività.
- Per scoprire dove puoi eseguire il deployment di 1 vCPU, consulta Regioni supportate per C4A.