

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 手動スナップショットレポジトリの登録
<a name="managedomains-snapshot-registerdirectory"></a>

手動インデックススナップショットを取得する前に、OpenSearch Service を用いてスナップショットレポジトリを登録する必要があります。この 1 回限りのオペレーションでは、「」で説明されているように`TheSnapshotRole`、 へのアクセスが許可されている認証情報を使用して AWS リクエストに署名する必要があります[前提条件](managedomains-snapshots.md#managedomains-snapshot-prerequisites)。

## ステップ 1: OpenSearch Dashboards でスナップショットロールをマッピングする (きめ細かなアクセスコントロールを使用している場合)
<a name="managedomains-snapshot-fgac"></a>

きめ細かなアクセスコントロールにより、リポジトリの登録時に追加のステップが導入されます。HTTP 基本認証を他のすべての目的で使用する場合でも、`TheSnapshotRole` を渡すための `iam:PassRole` 許可を持っている IAM ロールまたはユーザーに `manage_snapshots` ロールをマップする必要があります。

1. OpenSearch Service ドメインの OpenSearch Dashboards プラグインに移動します。OpenSearch Service コンソールのドメインダッシュボードに Dashboards エンドポイントがあります。

1. メインメニューから [**セキュリティ**]、[**ロール**] を選択し、[**manage\_snapshots**] ロールを選択します。

1. **[マッピングされたユーザー]**、**[マッピングの管理]** を選択します。

1. `TheSnapshotRole` を渡すための許可を持っているロールの ARN を追加します。**[Backend roles]** (バックエンドロール) の下にロール ARN を配置します

   ```
   arn:aws:iam::{{123456789123}}:role/{{role-name}}
   ```

1. [**マップ**] を選択し、ユーザーまたはロールが [**マッピングされたユーザー**] の下に表示されていることを確認します。

## ステップ 2: リポジトリを登録する
<a name="managedomains-snapshot-register"></a>

次の **[Snapshots]** (スナップショット) のタブには、スナップショットディレクトリの登録方法が記されています。手動スナップショットの暗号化に関するオプションと、新しいドメインに移行した後にスナップショットを登録する際のオプションについては、関連するタブを参照してください。

------
#### [ Snapshots ]

スナップショットリポジトリを登録するには、OpenSearch Service ドメインエンドポイントに PUT リクエストを送信します。[curl](https://curl.se/docs/manpage.html#--aws-sigv4)、[サンプル Python クライアント](#managedomains-snapshot-client-python)、[Postman](https://www.getpostman.com/)、またはその他の方法を使用して署名付きリクエストを送信し、スナップショットリポジトリを登録できます。OpenSearch Dashboards コンソールでは、PUT リクエストを使用してリポジトリを登録することはできませんのでご注意ください。

 リクエストは以下のような形式です。

```
PUT {{domain-endpoint}}/_snapshot/{{my-snapshot-repo-name}}
{
  "type": "s3",
  "settings": {
    "bucket": "{{amzn-s3-demo-bucket}}",
    "base_path": "{{my/snapshot/directory}}",
    "region": "{{region}}",
    "role_arn": "arn:aws:iam::{{123456789012}}:role/{{TheSnapshotRole}}"
  }
}
```

**注記**  
リポジトリ名は「cs-」で始めることはできません。さらに、複数のドメインから同じリポジトリに書き込まない必要があります。リポジトリへの書き込みアクセス権を持つドメインは、1 つだけにする必要があります。

ドメインが Virtual Private Cloud (VPC) に存在する場合は、リクエストが正常にスナップショットレポジトリに登録するようにお使いのコンピュータが VPC に接続されていることが必要です。VPC へのアクセスはネットワーク構成によって異なりますが、VPN あるいは社内ネットワークへの接続を含む場合がよくあります。OpenSearch Service ドメインにアクセスできるかを確認するには、ウェブブラウザで `https://{{your-vpc-domain}}.{{region}}.es.amazonaws.com` を開き、デフォルトの JSON 応答を受信していることを確認します。

Amazon S3 バケットが OpenSearch ドメイン AWS リージョン 以外の にある場合は、リクエスト`"endpoint": "s3.amazonaws.com"`に パラメータを追加します。

------
#### [ Encrypted snapshots ]

現在、 AWS Key Management Service (KMS) キーを使用して手動スナップショットを暗号化することはできませんが、サーバー側の暗号化 (SSE) を使用して保護できます。

スナップショットリポジトリとして使用しているバケットの S3 管理のキーを使って SSE を有効にするには、PUT リクエストの `"settings"` ブロックに `"server_side_encryption": true` を追加します。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) の使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)」を参照してください。

または、スナップショットリポジトリとして使用する S3 バケットのサーバー側の暗号化に AWS KMS キーを使用することもできます。このアプローチを使用する場合は、S3 バケットの暗号化に使用される AWS KMS キーにアクセス`TheSnapshotRole`許可を付与してください。詳細については、「[AWS KMSのキーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)」を参照してください。

------
#### [ Domain migration ]

スナップショットリポジトリの登録は 1 回限りのオペレーションです。ただし、1 つのドメインから別のドメインに移行するには、古いドメインと新しいドメインで同じスナップショットレポジトリを登録する必要があります。リポジトリ名は任意です。

新しいドメインに移行する場合、または同じリポジトリを複数のドメインに登録する場合は、次のガイドラインを考慮してください。
+ 新しいドメインにリポジトリを登録する場合は、`"readonly": true` を PUT リクエストの `"settings"` ブロックに追加します。この設定により、古いドメインのデータが誤って上書きされるのを防ぐことができます。リポジトリへの書き込みアクセス権を持つドメインは、1 つだけにする必要があります。
+ データを別の AWS リージョンへ移行する場合 (us-east-2 にある古いドメインとバケットから us-west-2 にある新しいドメインへ等) は、`"region": "{{region}}"` を PUT ステートメントの `"endpoint": "s3.amazonaws.com"` に置き換えて、リクエストを再送信します。

------

### サンプル Python クライアントの使用
<a name="managedomains-snapshot-client-python"></a>

Python クライアントは、シンプルな HTTP リクエストよりも自動化が容易で、再利用性が向上します。この方法を使用してスナップショットリポジトリを登録する場合は、次のサンプル Python コードを `register-repo.py` などの Python ファイルとして保存します。クライアントでは、[AWS SDK for Python (Boto3)](https://aws.amazon.com/sdk-for-python/)、[リクエスト](http://docs.python-requests.org/)および [requests-aws4auth](https://pypi.python.org/pypi/requests-aws4auth) パッケージが必要になります。クライアントには、他のスナップショットオペレーションのコメントアウトされた例が含まれています。

サンプルコードで、次の変数を更新します: `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": "{{amzn-s3-demo-bucket}}",
    "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)
```