本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
註冊手動快照儲存庫
您需要先向 OpenSearch Service 註冊快照儲存庫,才能手動擷取索引快照。此一次性操作要求您使用允許存取 的憑證簽署 AWS 請求TheSnapshotRole
,如 中所述必要條件。
步驟 1:在 OpenSearch 儀表板中映射快照角色 (如果使用精細存取控制)
精細存取控制會在註冊儲存庫時進行額外的步驟。即使您將HTTP基本身分驗證用於所有其他用途,仍需要將manage_snapshots
角色映射至具有傳遞 iam:PassRole
許可IAM的角色TheSnapshotRole
。
-
導覽至 OpenSearch 服務網域的 OpenSearch Dashboards 外掛程式。您可以在 OpenSearch 服務主控台的網域儀表板上找到儀表板端點。
-
從主選單中選擇 Security (安全性)、Roles (角色),然後選取 manage_snapshots 角色。
-
選擇 Mapped users (已映射的使用者)、Manage mapping (管理映射)。
-
新增具有傳遞 許可之角色ARN的
TheSnapshotRole
。在後端角色 ARNs下放置角色。arn:aws:iam::
123456789123
:role/role-name
-
選擇 Map (映射),並確認使用者或角色顯示在 Mapped users (已映射的使用者) 中。
步驟 2:註冊儲存庫
下列快照索引標籤示範如何註冊快照目錄。如需在遷移至新網域後加密手動快照和註冊快照的特定選項,請參閱相關索引標籤。
使用 Python 用戶端範例
Python 用戶端比簡單的HTTP請求更易於自動化,並且具有更好的可重複使用性。如果您選擇使用此方法來註冊快照儲存庫,請將下列範例 Python 程式碼儲存為 Python 檔案,例如 register-repo.py
。用戶端需要 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)