Tutorial: Migrazione al servizio OpenSearch di Amazon - Amazon OpenSearch Service

Tutorial: Migrazione al servizio OpenSearch di Amazon

Gli snapshot di indice sono un modo comune per eseguire la migrazione da un cluster OpenSearch autogestito o da un cluster Elasticsearch legacy al servizio OpenSearch di Amazon. In generale, il processo consiste nei seguenti passaggi:

  1. Acquisire uno snapshot del cluster esistente e caricare lo snapshot in un bucket Amazon S3.

  2. Creare un dominio OpenSearch Service.

  3. Assegnare le autorizzazioni OpenSearch Service per accedere al bucket e assegnare all'account utente le autorizzazioni per l'utilizzo degli snapshot.

  4. Ripristinare lo snapshot nel dominio OpenSearch Service.

Questa spiegazione passo per passo fornisce passaggi più dettagliati e opzioni alternative, ove applicabile.

Acquisizione e caricamento dello snapshot

Sebbene sia possibile utilizzare il plugin repository-s3 per eseguire snapshot direttamente in S3, è necessario installare il plugin su ogni nodo, modificare opensearch.yml (o elasticsearch.yml se si utilizza un cluster Elasticsearch), riavviare ogni nodo, aggiungere le credenziali AWS e infine eseguire lo snapshot. Il plugin è una grande opzione per l'uso continuo o per la migrazione di cluster più grandi.

Per i cluster più piccoli, un approccio una tantum consiste nel prendere uno snapshot condiviso del file system e quindi utilizzare l'AWS CLI per caricarlo su S3. Se si dispone già di uno snapshot, andare al passaggio 4.

Per acquisire uno snapshot e caricarlo in Amazon S3

  1. Aggiungi l'impostazione path.repo a opensearch.yml (o Elasticsearch.yml) su tutti i nodi e quindi riavvia ogni nodo.

    path.repo: ["/my/shared/directory/snapshots"]
  2. Registra un repository di snapshot; questa operazione è necessaria prima di acquisire uno snapshot. Un repository è solo un percorso di storage: un file system condiviso, Amazon S3, File system distribuito Hadoop (HDFS) ecc. In questo caso, utilizzeremo un file system condiviso ("fs"):

    PUT _snapshot/my-snapshot-repo-name { "type": "fs", "settings": { "location": "/my/shared/directory/snapshots" } }
  3. Acquisire lo snapshot:

    PUT _snapshot/my-snapshot-repo-name/my-snapshot-name { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }
  4. Installare AWS CLI ed eseguire aws configure per aggiungere le credenziali.

  5. Passare alla directory snapshot. Quindi eseguire i seguenti comandi per creare un nuovo bucket S3 e caricare il contenuto della directory snapshot in quel bucket:

    aws s3 mb s3://bucket-name --region us-west-2 aws s3 sync . s3://bucket-name --sse AES256

    A seconda delle dimensioni dello snapshot e della velocità della connessione Internet, questa operazione può richiedere un po' di tempo.

Creare un dominio

Sebbene la console sia il modo più semplice per creare un dominio, in questo caso, il terminale è già aperto e l'AWS CLI installata. Modificare il seguente comando per creare un dominio che si adatti alle proprie esigenze:

aws opensearch create-domain \ --domain-name migration-domain \ --engine-version OpenSearch_1.0 \ --cluster-config InstanceType=c5.large.search,InstanceCount=2 \ --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 \ --node-to-node-encryption-options Enabled=true \ --encryption-at-rest-options Enabled=true \ --domain-endpoint-options EnforceHTTPS=true,TLSSecurityPolicy=Policy-Min-TLS-1-2-2019-07 \ --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions='{MasterUserName=master-user,MasterUserPassword=master-user-password}' \ --access-policies '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":["*"]},"Action":["es:ESHttp*"],"Resource":"arn:aws:es:us-west-2:123456789012:domain/migration-domain/*"}]}' \ --region us-west-2

Così com'è, il comando crea un dominio accessibile a Internet con due nodi dati, ciascuno con 100 GiB di archiviazione. Consente inoltre il controllo degli accessi granulari con l'autenticazione di base HTTP e tutte le impostazioni di crittografia. Utilizzare la console OpenSearch Service se è necessaria una configurazione di sicurezza più avanzata, ad esempio un VPC.

Prima di eseguire il comando, modificare il nome di dominio, le credenziali dell'utente master e il numero di account. Specificare la stessa Regione AWS utilizzata per il bucket S3 e una versione di OpenSearch/Elasticsearch compatibile con lo snapshot.

Importante

Gli snapshot sono compatibili con le versioni successive e solo con una versione principale. Ad esempio, non è possibile ripristinare uno snapshot da un cluster 2.x su un cluster 1.x o un cluster 6.x, ma solo su un cluster 2.x o 5.x. Anche la versione minore conta. Non è possibile ripristinare uno snapshot da un cluster 5.3.3 autogestito in un dominio OpenSearch Service 5.3.2. Consigliamo di scegliere la versione più recente di OpenSearch o Elasticsearch supportata dallo snapshot. Per una tabella delle versioni compatibili, consultare Utilizzo di uno snapshot per migrare i dati.

Fornire le autorizzazioni al bucket S3.

Nella console AWS Identity and Access Management (IAM), creare un ruolo con le seguenti autorizzazioni e la relazione di trust. Durante la creazione del ruolo, scegliere S3 come Servizio AWS. Assegnare un nome al ruolo OpenSearchSnapshotRole in modo che sia facile da trovare.

Autorizzazioni

{ "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-name/*" ] } ] }

Relazione di attendibilità

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Assegnare quindi all'utente o al ruolo IAM personale utilizzato usato per configurare la AWS CLI in precedenza le autorizzazioni per assumere OpenSearchSnapshotRole. Creare la policy seguente e collegarla alla propria identità.

Autorizzazioni

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole" } ] }

Mappatura del ruolo dello snapshot in OpenSearch Dashboards (se si utilizza un controllo granulare degli accessi)

Se è stato abilitato il controllo granulare degli accessi, anche se si utilizza l'autenticazione di base HTTP per tutti gli altri scopi, è necessario mappare il ruolo manage_snapshots all'utente o al ruolo IAM in modo da poter utilizzare gli snapshot.

Come concedere all'identità le autorizzazioni per l'utilizzo degli snapshot

  1. Accedere a Dashboards utilizzando le credenziali dell'utente principale specificate al momento della creazione del dominio OpenSearch Service. È possibile trovare l'URL di Dashboards nella console OpenSearch Service. Presenta il formato https://domain-endpoint/_dashboards/.

  2. Dal menu principale scegliere Sicurezza, Ruoli e selezionare il ruolo manage_snapshots.

  3. Scegliere Utenti mappati, Gestisci mappatura.

  4. Aggiungere l'ARN del dominio per l'utente o il ruolo IAM personale nel campo appropriato. L'ARN deve avere uno dei seguenti formati:

    arn:aws:iam::123456789123:user/user-name
    arn:aws:iam::123456789123:role/role-name
  5. Selezionare Mappa e confermare che l'utente o il ruolo venga visualizzato in Utenti mappati.

Ripristino dello snapshot

A questo punto, sono disponibili due modi per accedere al dominio OpenSearch Service: l'autenticazione di base HTTP con le credenziali utente principale o l'autenticazione AWS utilizzando le credenziali IAM. Poiché gli snapshot utilizzano Amazon S3, che non ha un concetto di utente principale, è necessario utilizzare le credenziali IAM per registrare il repository di snapshot con il dominio OpenSearch Service.

La maggior parte dei linguaggi di programmazione ha librerie per aiutare con le richieste di firma, ma l'approccio più semplice consiste nell'utilizzare uno strumento come Postman e inserire le credenziali IAM nella sezione Autorizzazione.

Ripristinare lo snapshot

  1. Indipendentemente da come si sceglie di firmare le richieste, il primo passo è registrare il repository:

    PUT _snapshot/my-snapshot-repo-name { "type": "s3", "settings": { "bucket": "bucket-name", "region": "us-west-2", "role_arn": "arn:aws:iam::123456789012:role/OpenSearchSnapshotRole" } }
  2. Quindi elencare lo snapshot nel repository e trovare quello che si desidera ripristinare. A questo punto, continuare a usare Postman o passare a uno strumento come curl.

    Sintassi abbreviata

    GET _snapshot/my-snapshot-repo-name/_all

    curl

    curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/my-snapshot-repo-name/_all
  3. Ripristinare lo snapshot:

    Sintassi abbreviata

    POST _snapshot/my-snapshot-repo-name/my-snapshot-name/_restore { "indices": "migration-index1,migration-index2,other-indices-*", "include_global_state": false }

    curl

    curl -XPOST -u 'master-user:master-user-password' https://domain-endpoint/_snapshot/my-snapshot-repo-name/my-snapshot-name/_restore \ -H 'Content-Type: application/json' \ -d '{"indices":"migration-index1,migration-index2,other-indices-*","include_global_state":false}'
  4. Infine, verifica che gli indici siano ripristinati come previsto.

    Sintassi abbreviata

    GET _cat/indices?v

    curl

    curl -XGET -u 'master-user:master-user-password' https://domain-endpoint/_cat/indices?v

A questo punto, la migrazione è completa. Puoi configurare i client per utilizzare il nuovo endpoint del servizio OpenSearch, ridimensionare il dominio in base al carico di lavoro, controllare il numero di partizioni per gli indici, passare a un utente principale IAM o iniziare a creare visualizzazioni in OpenSearch Dashboards.