Lorsque j'ai pris un instantané d'Amazon Elasticsearch Service (ci-après dénommé es), je me suis retrouvé coincé autour de l'autorité, je vais donc le résumer. L'environnement d'utilisation est Mac.
――Comment pouvez-vous prendre manuellement un instantané de es? ――Cela semble un peu compliqué autour de l'autorité, alors touchons-le une fois ―― Mesurons le temps qu'il faudra pour obtenir et restaurer
J'ai commencé à bouger mes mains avec un tel sens du défi.
-Voir Document officiel -Se reporter à [Amazon Elasticsearch Service] Comment restaurer à partir d'un instantané manuel (cet article) J'ai vraiment fait référence) --Donner des autorisations dans Kibana
Je l'ai fait par une telle procédure! !! !!
Afin de créer un instantané manuellement, les mesures suivantes sont requises comme condition préalable.
--Créer un seau pour s3 --Organiser les rôles et les politiques IAM (← J'ai eu du mal ici)
Le script écrit cette fois est écrit en python, mais il peut aussi être écrit en Java, Ruby, Node, Go. Veuillez vous référer à ce Document officiel
Ensuite, je voudrais expliquer dans l'ordre.
Créez manuellement un bucket pour stocker les instantanés. Cette fois, j'ai créé `` arn: aws: s3 ::: test-es-snapshot '' dans la console S3. Ceci est nécessaire aux deux endroits suivants
--Dans la déclaration de ressources de la stratégie IAM attachée au rôle IAM --Dans la charge utile python utilisée pour l'enregistrement du référentiel d'instantanés
Il y a trois endroits à vérifier cette fois
Modifiez la relation d'approbation comme suit Ce que le directeur précise est «qui assumera ce rôle» Le service suivant indique es, ce qui signifie "le rôle de service créé prend es" (je pense)
Décrit dans la relation de confiance du rôle de service
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
Créez une politique de gestion appelée create-es-backup-policy avec le contenu suivant et attachez-la au rôle de service créé ci-dessus.
create-es-backup-policy(Attacher au rôle de service créé)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::test-es-snapshot"
]
},
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::test-es-snapshot/*"
]
}
]
}
Dans Kibana, sélectionnez ** Sécurité **, ** Mappages de rôles **, ** Ajouter **. Pour ** Rôle **, sélectionnez ** manage_snapshots **. Spécifiez ensuite l'ARN de l'utilisateur IAM ou du rôle IAM dans le champ approprié. Saisissez l'ARN de l'utilisateur dans la section ** [Utilisateurs] **. Saisissez l'ARN du rôle dans la section ** [Rôles backend] *. ( Cela permet aux informations de rôle d'utiliser des instantanés) Cette fois, j'ai entré les informations ARN du rôle de service créé à l'endroit appelé Rôles backend sur la page intitulée Mappages de rôles de Kibana. (Je devrais être en mesure de définir les informations d'identification en exécutant la stratégie IAM, mais je suis resté coincé avec une erreur, donc je l'ai évité avec cette méthode)
C'est la fin de l'organisation autour du rouleau IAM.
Exécutez le script python suivant (dans le matériel de référence, l'authentification a été effectuée avec la clé d'accès, mais actuellement officiellement, l'authentification avec la clé d'accès n'est pas recommandée)
register-repositry.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Nom de la région' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
host = 'point de terminaison de domaine es/' # /N'oublie pas
# Register repository
path = '_snapshot/test-es-snapshot' # the Elasticsearch API endpoint
url = host + path
payload = {
"type": "s3",
"settings": {
"bucket": "Nom du godet",
"region": "Nom de la région",
"role_arn": "Nom du rôle de service créé"
}
}
headers = {"Content-Type": "application/json"}
r = requests.put(url, auth=awsauth, json=payload, headers=headers)
print(r.status_code)
print(r.text)
Confirmez que la réponse est la suivante
200
{"acknowledged":true}
snapshot.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Nom de la région' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
host = 'point de terminaison de domaine es/' # /N'oublie pas
path = '_snapshot/test-es-snapshot/my-snapshot-1' # the Elasticsearch API endpoint
url = host + path
r = requests.put(url, auth=awsauth)
print(r.text)
Exemple d'exécution
-> % python snapshot.py
Enter MFA code for :
{"accepted":true}
check_repository.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Nom de la région' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
host = 'point de terminaison de domaine es/' # /N'oublie pas
path = '_snapshot/?pretty'
url = host + path
r = requests.get(url, auth=awsauth)
print(r.text)
Exemple d'exécution
-> % python check_repository.py
Enter MFA code for :
{
"cs-automated-enc" : {
"type" : "s3"
},
"test-es-snapshot" : {
"type" : "s3",
"settings" : {
"bucket" : "test-es-snapshot",
"region" : "Nom de la région",
"role_arn" : "Nom du rôle de service créé"
}
}
}
check_snapshot.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Nom de la région' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
host = 'point de terminaison de domaine es/' # /N'oublie pas
path = '_snapshot/test-es-snapshot/_all?pretty'
url = host + path
r = requests.get(url, auth=awsauth)
print(r.text)
Exemple d'exécution
-> % python check_snapshot.py
Enter MFA code for :
{
"snapshots" : [ {
"snapshot" : "my-snapshot-1",
"uuid" : "*************",
"version_id" : ******,
"version" : "7.8.0",
"indices" : [ "nom d'index ①", "nom d'index ②",・ ・ ・ ・ ・ ・],
"include_global_state" : true,
"state" : "SUCCESS",
"start_time" : "2020-11-17T07:20:17.265Z",
"start_time_in_millis" : 1605597617265,
"end_time" : "2020-11-17T07:21:21.901Z",
"end_time_in_millis" : 1605597681901,
"duration_in_millis" : 64636,
"failures" : [ ],
"shards" : {
"total" : 38,
"failed" : 0,
"successful" : 38
}
} ]
}
S'il existe un index portant le même nom au moment de la restauration, il ne peut pas être restauré, vous devez donc supprimer l'index que vous souhaitez restaurer une fois. La procédure pour supprimer une fois l'index spécifié et le restaurer est indiquée ci-dessous.
delete_index.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Nom de la région' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
host = 'point de terminaison de domaine es/' # /N'oublie pas
# DELETE INDEX
path = 'Nom de l'index'
url = host + path
r = requests.delete(url, auth=awsauth)
print(r.text)
Exemple d'exécution
-> % python delete_index.py
Enter MFA code for :
{"acknowledged":true}
Dans la console es, sélectionnez le domaine et accédez à l'onglet Index pour voir que l'index a été supprimé. Vous pouvez également voir sur le tableau de bord que moins de documents peuvent être recherchés.
restore_one.py
import boto3
import requests
from requests_aws4auth import AWS4Auth
region = 'Nom de la région' # e.g. us-west-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
host = 'point de terminaison de domaine es/' # /N'oublie pas
path = '_snapshot/test-es-snapshot/my-snapshot-1/_restore'
url = host + path
payload = {"indices": "Nom de l'index"}
headers = {"Content-Type": "application/json"}
r = requests.post(url, auth=awsauth, json=payload, headers=headers)
print(r.text)
Exemple d'exécution
-> % python restore_one.py
Enter MFA code for :
{"accepted":true}
Le matériel de référence était très utile pour obtenir et restaurer des instantanés. (Presque la même.) J'ai eu beaucoup de mal à organiser les rôles et les stratégies IAM. .. .. C'était difficile si je ne pouvais pas déterminer quelle politique était attachée à quel rôle. ..
J'espère que cela sera utile à n'importe qui. ..