기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
수동 스냅샷 리포지토리 등록
수동 인덱스 스냅샷을 생성하려면 OpenSearch Service를 사용해 스냅샷 리포지토리를 등록해야 합니다. 이 일회성 작업을 수행하려면 사전 조건에서 설명하는 것처럼 TheSnapshotRole
에 액세스할 수 있는 자격 증명을 이용해 AWS 요청에 서명해야 합니다.
1단계: OpenSearch 대시보드에서 스냅샷 역할 매핑(세분화된 액세스 제어를 사용하는 경우)
세분화된 액세스 제어를 사용하면 리포지토리를 등록할 때 추가 단계가 있습니다. 다른 모든 목적으로 HTTP 기본 인증을 사용하더라도 TheSnapshotRole
을 전달할 iam:PassRole
권한이 있는 IAM 역할에 manage_snapshots
역할을 매핑해야 합니다.
-
OpenSearch Service 도메인에 대한 OpenSearch 대시보드 플러그인으로 이동합니다. OpenSearch Service 콘솔의 도메인 대시보드에서 Dashboards 엔드포인트를 찾을 수 있습니다.
-
주 메뉴에서 보안(Security), 역할(Roles)을 선택하고 manage_snapshots 역할을 선택합니다.
-
매핑된 사용자(Mapped users), 매핑 관리(Manage mapping)를 차례로 선택합니다.
-
TheSnapshotRole
을 전달할 권한이 있는 역할의 ARN을 추가합니다. Backend roles(백엔드 역할) 아래에 역할 ARN을 배치합니다.arn:aws:iam::
123456789123
:role/role-name
-
맵(Map)을 선택하고 매핑된 사용자(Mapped users)에 사용자 또는 역할이 나타나는지 확인합니다.
2단계: 리포지토리 등록
다음 스냅샷 탭은 스냅샷 디렉토리를 등록하는 방법을 보여줍니다. 수동 스냅샷을 암호화하고 새 도메인으로 마이그레이션한 후 스냅샷을 등록하는 것과 관련된 옵션은 관련 탭을 참조하세요.
샘플 Python 클라이언트 사용하기
Python 클라이언트는 간단한 HTTP 요청보다 자동화가 쉽고 재사용성이 뛰어납니다. 이 메서드를 사용하여 스냅샷 리포지토리를 등록하려면 다음 샘플 Python 코드를 register-repo.py
와 같은 Python 파일로 저장합니다. 클라이언트는 AWS SDK for Python (Boto3)
샘플 코드에서 변수 host
, region
, path
, payload
를 업데이트합니다.
import boto3 import requests from requests_aws4auth import AWS4Auth host = '' # domain endpoint region = '' # 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) # Register repository path = '/_snapshot/
my-snapshot-repo-name
' # the OpenSearch API endpoint url = host + path payload = { "type": "s3", "settings": { "bucket": "s3-bucket-name
", "base_path": "my/snapshot/directory
", "region": "us-west-1
", "role_arn": "arn:aws:iam::123456789012
:role/snapshot-role
" } } headers = {"Content-Type": "application/json"} r = requests.put(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text) # # Take snapshot # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot' # url = host + path # # r = requests.put(url, auth=awsauth) # # print(r.text) # # # Delete index # # path = 'my-index' # url = host + path # # r = requests.delete(url, auth=awsauth) # # print(r.text) # # # Restore snapshot (all indexes except Dashboards and fine-grained access control) # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = { # "indices": "-.kibana*,-.opendistro_security,-.opendistro-*", # "include_global_state": False # } # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text) # # # Restore snapshot (one index) # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = {"indices": "my-index"} # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text)