AWS ElasticsearchService建立スナップショット

説明

AWS Elasticsearchは、ドメイン内のメインインデックスシャードのスナップショットを毎日自動的に作成し、これらのスナップショットを事前設定されたAWSS3ストレージスペースに保存します。これらのスナップショットは、追加費用なしで14日間保持されます。さらに、これらのスナップショットを使用してドメインを復元することもできますが、これらの自動スナップショットを新しいドメインに移行することはできません。移行する場合は、独自のリポジトリ(S3ストレージスペース)に保存されている手動スナップショットを使用する必要があります。手動スナップショットには、標準のS3料金が請求されます。
したがって、定期的なデータバックアップ、データリカバリ、ES移行などのアクティビティを完了するために、手動のスナップショットを作成する必要があります。この記事では、主に手動スナップショットの作成プロセスとスキームについて説明します〜

ソリューションアーキテクチャ

AWS ElasticsearchService建立スナップショット

スナップショットプロセスを構築する

公式文書、あまりよく書かれていません〜

AWSで手動スナップショットを作成するための前提条件

AWSS3ストレージスペースを作成する

ここで作成された名前はai-voice-test-snapshot、値が後で戦略とスクリプトで使用されることです。

AWS ElasticsearchService建立スナップショット

IAMロールを作成する

ここでの役割名はですai-voice-test-es-snapshot。この値、後で戦略とスクリプトで使用されます。

IAMコンソールでAWSサービスロールを作成する場合、AWSElasticsearchは[ロールタイプの選択]ドロップダウンリストに含まれません。ただし、次のように、最初にAmazon EC2を選択し、プロンプトに従ってロールの作成を完了してから、ロールの信頼関係でec2.amazonaws.comをes.amazonaws.comに変更できます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "es.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

IAMポリシーを作成する

ここで2つの戦略を作成します。内容は次のとおりです〜

  • AWSElasticsearchドメインを保存するS3ストレージスペースを指定します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::ai-voice-test-snapshot"
            ]
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::ai-voice-test-snapshot/*"
            ]
        }
    ]
}
  • es:ESHttpPut操作に対するロールのアクセス権を指定します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:Pa***ole",
            # 角色 ARN
            "Resource": "arn:aws:iam::123456789123:role/ai-voice-test-es-snapshot"
        },
        {
            "Effect": "Allow",
            "Action": "es:ESHttpPut",
            # ES 域 ARN
            "Resource": "arn:aws:es:ap-southeast-1:123456789123:domain/aivoice-test"
        }
    ]
}

スナップショットリポジトリを作成し、スナップショットを生成します

最初に基本的な概念を理解します。ESのスナップショットアーキテクチャには2つの層があります。最初の層はリポジトリで、2番目の層はスナップショット名であるため、URIは次のように大きくなります。

# /_snapshot/repository/snapshot-name
_snapshot/es-snapshot-repo/es-snapshot-20210319

AWS Elasticsearch Serviceの手動スナップショットシステムは、指定したS3バケットにデータを保存します。リポジトリ名はバケットソースに対応します。同じバケットソースに対応するように複数のリポジトリを設定でき、これらの同じソースが表示されます。リポジトリ内のスナップショットは同じものです。これは理解しやすいかもしれませんが、実際の操作ではあまり意味がありません。

スナップショットリポジトリを登録する

必要なパッケージをインストールします。

pip install boto3
pip install requests_aws4auth

コードは現在ai jumperサーバーの/root/admin-workspace/es-snapshotパスに配置されおり、内容は次のとおりです。

# cat register-repo.py
import boto3
import requests
from requests_aws4auth import AWS4Auth

host = 'https://vpc-aivoice-test-thisisjustatest.ap-southeast-1.es.amazonaws.com/' # include https:// and trailing /
region = 'ap-southeast-1' # 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/es-snapshot-repo' # the Elasticsearch API endpoint
url = host + path

payload = {
  "type": "s3",
  "settings": {
    "bucket": "ai-voice-test-snapshot",
    "region": "ap-southeast-1",
    "role_arn": "arn:aws:iam::123456789123:role/ai-voice-test-es-snapshot"
  }
}

headers = {"Content-Type": "application/json"}

r = requests.put(url, auth=awsauth, json=payload, headers=headers)

print(r.status_code)
print(r.text)

説明:

上記のコードのaccess_key, secret_key情報は、/root/.awsディレクトリ内の2つのファイルから取得されます。これは、操作権限が必要なIAMアカウントです。次のように:

# cat ./config
[default]
region = ap-southeast-1
# cat ./credentials
[default]
aws_access_key_id = xxxxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxx

上記のスクリプトを実行すると、スナップショットリポジトリのみが登録され、スナップショットはまだ作成されていません。この登録済みリポジトリは、kibana DEV〜で表示できます。

# 注册 snapshot repository 
python register-repo.py

スナップショットを作成する

スナップショットを作成するリクエストは次のとおりです。KibanaDevToolsを使用している場合は、ドメイン名を追加する必要はありません。

# 格式:PUT /_snapshot/my-snapshot-repo/snapshot-name
PUT /_snapshot/es-snapshot-repo/es-snapshot-20210319

うまくいけば、S3はスナップショット関連のファイルをゆっくりと使い果たしますが、完了するまでに少し時間がかかります。テスト後、150Gのデータボリュームの実行には約1時間かかります。

スナップショットを確認する

スナップショットビルドステータス情報の表示:

GET /_snapshot/es-snapshot-repo/es-snapshot-20210319

印刷情報は次のとおりです。

AWS ElasticsearchService建立スナップショット

その他のコマンド

# 获取所有repositories:
GET /_snapshot/_all?pretty
# 获取某个仓库下的快照信息
GET /_snapshot/es-snapshot-repo/_all?pretty

参照文書

おすすめ

転載: blog.51cto.com/wutengfei/2665539