Comment puis-je résoudre l'erreur d'instantané manuel dans mon cluster Amazon OpenSearch Service ?
Dernière mise à jour : 12-05-2022
Je veux restaurer un instantané manuel de mon cluster Amazon OpenSearch Service. Cependant, je reçois une erreur lorsque j'essaie d'enregistrer un référentiel ou d'accéder à un référentiel enregistré. D'où vient le problème et comment le résoudre ?
Brève description
Pour réussir la migration des données à partir d'un instantané manuel dans OpenSearch Service, suivez les étapes suivantes :
1. Choisissez un compartiment Amazon Simple Storage Service (Amazon S3) où vous souhaitez stocker votre instantané.
2. Enregistrez le compartiment Amazon S3 auprès de votre cluster source OpenSearch Service.
3. Prenez un instantané du cluster source OpenSearch Service, puis stockez-le dans votre compartiment Amazon S3.
4. Enregistrez votre cluster de destination avec le même compartiment Amazon S3 pour vous assurer de pouvoir afficher l'instantané manuel.
5. Restaurez l'instantané manuel sur le cluster de destination dans OpenSearch Service.
À défaut, vous risquez de rencontrer l'un des problèmes suivants :
- Erreur 403 Non autorisé
- repository_missing_exception
- concurrent_snapshot_execution_exception
- snapshot_restore_exception
- a_w_s_security_token_service_exception
- État de l'instantané « PARTIEL »
- Problème de classe de stockage Amazon S3 Glacier
Résolution
Erreur 403 Non autorisé
Si vous activez le contrôle d'accès précis (FGAC) sur votre domaine OpenSearch Service, l'erreur suivante peut s'afficher lorsque vous prenez un instantané :
{
"error": {
"root_cause": [{
"type": "security_exception",
"reason": "no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::012345678912:user/username, backend_roles=[], requestedTenant=null]"
}],
"type": "security_exception",
"reason": "no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::012345678912:user/username, backend_roles=[], requestedTenant=null]"
},
"status": 403
}
Pour résoudre l'erreur 403 Non autorisé, assurez-vous de spécifier un paramètre nom d'utilisateur :mot de passe chaque fois que vous prenez un instantané manuellement :
curl -XPUT -u 'opensearch-domain-endpoint/_snapshot/snapshot-repository-name/snapshot-name'
Remarque : vous devez être un super-utilisateur pour activer un contrôle d'accès précis pour votre domaine OpenSearch Service. Vous pouvez utiliser votre nom de super-utilisateur et votre mot de passe ou définir un rôle AWS Identity Access Management (IAM) en tant que super-utilisateur. Lorsque vous accédez à votre instantané de cluster, spécifiez vos informations d'identification de super-utilisateur ou votre rôle IAM. Si vous spécifiez un rôle IAM, celui-ci doit signer les requêtes HTTP à l'aide de sigv4. Pour plus d'informations sur l'utilisation du contrôle d'accès précis et sur les rôles IAM, consultez Création et gestion de domaines OpenSearch Service.
Vous devez également enregistrer un référentiel d'instantanés avec votre instantané et mapper le rôle manage_snapshots (gestion des instantanés) à un rôle IAM. Le rôle manage_snapshots doit disposer des autorisations appropriées (IAM:PassRole) pour assumer le rôle IAM (TheSnapshotRole). Pour plus d'informations, consultez Conditions préalables concernant les instantanés manuels.
Pour mapper le rôle manage_snapshots à un rôle IAM, procédez comme suit :
1. Ouvrez la console d'OpenSearch Dashboards.
2. Connectez-vous en tant qu'utilisateur principal.
3. Choisissez Security (Sécurité).
4. Choisissez Roles (Rôles).
5. Choisissez manage_snapshots comme rôle.
6. Choisissez Mapped users (Utilisateurs mappés).
7. Choisissez Gérer le mappage.
8. Sous Utilisateurs, ajoutez l'ARN de votre utilisateur (par exemple : « arn:aws:iam።012345678912:user/username »).
Repository_missing_exception
Avant de prendre un instantané d'index manuel, vous devez enregistrer un référentiel des instantanés manuels auprès d'OpenSearch Service. Votre rôle IAM (TheSnapshotRole) doit également être configuré pour fonctionner avec Amazon S3.
Si vous n'avez pas enregistré votre référentiel d'instantanés avant de prendre un instantané manuel ou si vous utilisez un nom de référentiel incorrect, l'erreur suivante s'affiche :
{
"error": {
"root_cause": [{
"type": "repository_missing_exception",
"reason": "[snapshot-repository-name] missing"
}],
"type": "repository_missing_exception",
"reason": "[snapshot-repository-name] missing"
},
"status": 404
}
Pour résoudre cette erreur, assurez-vous que vous répondez aux conditions préalables concernant les instantanés manuels. Vérifiez aussi les éventuelles fautes de frappe dans le nom du référentiel.
Concurrent_snapshot_execution_exception
Si un instantané est en cours, le message d'erreur suivant s'affiche lorsque vous essayez de prendre un autre instantané :
{
"error": {
"root_cause": [{
"type": "concurrent_snapshot_execution_exception",
"reason": "[snapshot-repository-name:snapshot-name] a snapshot is already running"
}],
"type": "concurrent_snapshot_execution_exception",
"reason": "[snapshot-repository-name:snapshot-name] a snapshot is already running"
}
}
Pour vérifier s'il existe un autre instantané en cours, exécutez la commande suivante :
curl -XGET 'opensearch-domain-endpoint/_snapshot/_status'
Si un instantané est déjà en cours, attendez qu'il se termine. De même, si vous pensez que votre instantané est bloqué, consultez votre historique d'instantanés par heure. Pour plus d'informations, consultez Pourquoi m'est-il impossible de supprimer un index ou de mettre à niveau mon cluster OpenSearch Service ?
Snapshot_restore_exception
Si vous tentez de migrer des données d'un cluster sur site vers un domaine OpenSearch Service, vous risquez alors de rencontrer l'exception suivante :
{
"error": {
"root_cause": [{
"type": "snapshot_restore_exception",
"reason": "[manual-snapshot-repo:my-manual-snapshot1/HPOcIJryTj6a6GJvyP79bw] the snapshot was created with Elasticsearch version [6.8.0] which is higher than the version of this node [6.7.0]"
}],
"type": "snapshot_restore_exception",
"reason": "[manual-snapshot-repo:my-manual-snapshot1/HPOcIJryTj6a6GJvyP79bw] the snapshot was created with Elasticsearch version [6.8.0] which is higher than the version of this node [6.7.0]"
},
"status": 500
}
Ce message d'erreur apparaît lorsqu'un instantané pris sur un cluster existant s'exécute sur une version d'Elasticsearch différente de celle d'OpenSearch Service. Si votre cluster est exécuté sur une version antérieure d'Elasticsearch qu'OpenSearch Service, envisagez de mettre à niveau votre version Elasticsearch. Vous pouvez également utiliser l'API de réindexation distante pour migrer vos index.
a_w_s_security_token_service_exception
Si le rôle IAM associé à votre instantané manuel n'a pas de relation d'approbation établie pour « es.amazonaws.com », vous recevez l'exception suivante :
{
"error": {
"root_cause": [{
"type": "repository_exception",
"reason": "[es_01082021_repo] Could not determine repository generation from root blobs"
}],
"type": "repository_exception",
"reason": "[es_01082021_repo] Could not determine repository generation from root blobs",
"caused_by": {
"type": "i_o_exception",
"reason": "Exception when listing blobs by prefix [index-]",
"caused_by": {
"type": "a_w_s_security_token_service_exception",
"reason": "a_w_s_security_token_service_exception: User: arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::679203657591:role/ES_Backup_Role (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 36d09b93-d94f-457e-8fa5-b0a50ba436c3)"
}
}
},
"status": 500
}
Avec les instantanés OpenSearch Service, un rôle interne est créé (tel que arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591). Ce rôle interne se comporte comme le rôle IAM associé à l'instantané manuel, puis effectue toutes les opérations requises.
Pour résoudre l'exception de jeton de sécurité, assurez-vous de spécifier le rôle IAM associé à l'instantané manuel. Si vous n'avez pas de rôle IAM associé à l'instantané manuel, vous devez alors en créer un. Pour plus d'informations, consultez Conditions préalables concernant les instantanés manuels.
Vérifiez également la relation d'approbation pour le rôle IAM associé à l'instantané manuel. La relation d'approbation pour le rôle doit spécifier OpenSearch Service dans l'instruction Principal, comme ceci :
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
État d'instantané PARTIEL
Un instantané entre dans un état « PARTIEL » pour les raisons suivantes :
- Les partitions principales de votre cluster ne sont pas disponibles
- Statut rouge du cluster
- Crash de nœud
Un instantané partiel indique que les données provenant d'une partition n'ont pas pu être stockées. Vous pouvez toujours restaurer des données à partir d'un instantané partiel, mais vous devez utiliser des instantanés antérieurs pour restaurer les index manquants. Pour vérifier si votre cluster est entré dans un état « PARTIEL », vérifiez votre historique d'instantanés. Pour plus d'informations, consultez Restauration des instantanés.
Problème de Classes de stockage Amazon S3 Glacier
Si vous stockez un instantané restauré dans l'une des classes de stockage Amazon S3 Glacier, évitez d'appliquer une règle de cycle de vie Amazon S3 Glacier au compartiment. Les instantanés pris manuellement ne prennent pas en charge la classe de stockage Amazon S3 Glacier. Par conséquent, si vous appliquez une stratégie de cycle de vie Amazon S3 Glacier au compartiment S3, vous devez retourner tous les objets en transition à leur emplacement initial.
Après avoir replacé les objets dans une classe de stockage Amazon S3 standard, vous pouvez restaurer les objets à partir de ces instantanés. Pour plus d'informations, consultez Conditions préalables concernant les instantanés manuels.
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?