メニュー
Amazon Elasticsearch Service
開発者ガイド (API Version 2015-01-01)

Amazon Elasticsearch Service ドメインの管理

Amazon Elasticsearch Service (Amazon ES) ドメイン内のドキュメントサイズが大きくなり、数が増えるにつれ、また、ネットワークトラフィックが増大するにつれて、Elasticsearch クラスターの設定の更新が必要になる場合があります。ドメインを再設定する時期を把握するには、ドメインメトリクスを監視する必要があります。独自のインデックススナップショットを管理する、ドメインに対するデータ関連の API 呼び出しを監査する、ドメインにタグを割り当てる、という選択肢もあります。サービスから提供される Logstash プラグインを使用して、一括でデータをドメインに読み込めます。ここでは、これらのタスクや、ドメインの管理に関連する他のタスクを実行する方法を説明します。

専用マスターノードについて

Amazon Elasticsearch Service (Amazon ES) は、クラスターの安定性を向上するために専用マスターノードを使用します。専用マスターノードは、クラスター管理タスクを実行するクラスターノードですが、データを保持したりデータのアップロードリクエストに応答したりはしません。このように、クラスター管理タスクをオフロードすると、Elasticsearch クラスターの安定性が向上します。

注記

製品内の各 Amazon ES ドメインに、3 つの専用マスターノードを割り当てることを推奨します。

専用マスターノードは次のクラスター管理タスクを実行します:

  • クラスター内のすべてのノードを追跡する

  • クラスター内のインデックスの数を追跡する

  • 各インデックスに属するシャードの数を追跡する

  • クラスター内のノードのルーティング情報を維持

  • クラスター内のインデックス作成やノードの作成/削除など、状態が変化した後に、クラスターの状態を更新する

  • クラスターの状態に施された変更を、クラスター内のすべてのノードにわたって複製する

  • クラスター内のデータノードの可用性を監視するハートビートシグナル (定期的なシグナル) の送信により、すべてのクラスターノードの状態を監視する

次の図は、10 のインスタンスを持つ Amazon ES ドメインを表しています。インスタンスのうち 7 つはデータノードで、3 つは専用マスターノードです。専用マスターノードのうち、1 つのみがアクティブで、グレーの専用マスターノード 2 つは、アクティブな専用マスターノードが失敗したときのために、バックアップとして待機します。すべてのデータアップロードリクエストは、7 つのデータノードにより保存され、すべてのクラスター管理タスクは、アクティブな専用マスターノードにオフロードされます。

専用マスターインスタンスは検索およびクエリリクエストを処理しませんが、そのサイズは管理可能なインスタンス、インデックス、シャードの数と大きな相関があります。実稼働用クラスターでは、専用マスターインスタンスには以下のサイズをお勧めします。これらの推奨事項は、サービスの一般的なワークロードに基づいているため、ワークロード要件により異なります。

Instance Count

推奨される最小専用マスターインスタンス

5–10

m3.medium.elasticsearch

M3 インスタンスタイプは、us-east-2、ca-central-1、eu-west-2、ap-northeast-2、ap-south-1 の各リージョンでは使用できません。

10–20

m4.large.elasticsearch

20–50

c4.xlarge.elasticsearch

デフォルトの制限は、ドメインあたり 20 インスタンスです。ドメインあたり 100 インスタンスへの引き上げをリクエストするには、AWS サポートセンターでサポートケースを作成してください。

50–100

c4.2xlarge.elasticsearch

デフォルトの制限は、ドメインあたり 20 インスタンスです。ドメインあたり 100 インスタンスへの引き上げをリクエストするには、AWS サポートセンターでサポートケースを作成してください。

vCPU、メモリ、料金表など、特定のインスタンスタイプの詳細については、Amazon Elasticsearch Instance Prices を参照してください。クラスターの設定を変更した場合に発生する料金については、Amazon Elasticsearch Service の料金表を参照してください。

さらに、Amazon ES はドメイン更新オペレーション (設定の変更やソフトウェア更新の実行など) を実行するときに、Blue/Green デプロイプロセスを使用します。ドメインがこの状態にあるとき、ドメインのステータスは処理中です。専用マスターに、Blue/Green 更新に関連付けられた管理オーバーヘッドを処理するための十分なキャパシティーを維持することが重要です。

専用マスターノードに過度な負荷がかかることを防ぐため、次の表に表示される Amazon CloudWatch メトリクスを使用して、使用率を監視できます。これらのメトリクスが、それぞれの最大値に達した場合、より大きなインスタンスタイプを使用します。

CloudWatch メトリクス ガイドライン
MasterCPUUtilization 専用マスターノードの CPU 使用率 (%) を計測します。ドメインのステータスがアクティブのときにこのメトリクスが 40% を超え、ドメインのステータスが処理中のときに 60% を超える場合、インスタンスタイプのサイズを大きくすることをお勧めします。
MasterJVMMemoryPressure 専用マスターノードの JVM メモリ使用率 (%) を計測します。ドメインのステータスがアクティブのときにこのメトリクスが 60% を超え、ドメインのステータスが処理中のときに 85% を超える場合、インスタンスタイプのサイズを大きくすることをお勧めします。

詳細については、次のトピックを参照してください。

ゾーン対応 (コンソール) の有効化

それぞれの AWS リージョンは地理別に分類された地域であり、アベイラビリティーゾーンと呼ばれる複数の独立したロケーションを持っています。ノードまたはデータセンターの障害時にデータの損失を防ぎ、ダウンタイムを最小限に抑えるには、Amazon ES コンソールを使用し、同じリージョンの 2 つのアベイラビリティーゾーンに対して、Elasticsearch クラスターに属するノードとレプリカインデックスシャードを割り当てることができます。この割り当ては、ゾーン対応と呼ばれます。ゾーン対応を有効にする場合、ネイティブ Elasticsearch API を使用してクラスターのレプリカシャードを作成する必要があります。Amazon ES はアベイラビリティーゾーン全体のノードにレプリカを分散し、クラスターの可用性を向上します。クラスターのゾーン対応を有効にすると、ネットワークレイテンシーが少し長くなります。

重要

ゾーン対応では、インスタンス数を偶数にする必要があります。すべてのインデックスのデフォルト設定で、レプリカの数は 1 つです。インデックスに対してレプリカの数を 0 に指定する場合、ゾーン対応は 2 番目のアベイラビリティーゾーンにシャードを複製しません。シャードを複製しない場合、2 番目のアベイラビリティーゾーンに分散するレプリカがなく、機能を有効にしてもデータ損失を防げません。

次の図では、ゾーン対応が有効な 4 ノードクラスターを表しています。サービスは、すべてのプライマリインデックスシャードを 1 つのアベイラビリティゾーンに配置し、すべてのレプリカシャードを 2 番目のアベイラビリティゾーンに配置します。

ゾーン対応 (コンソール) を有効にするには

  1. https://aws.amazon.com に移動し、[Sign In to the Console] を選択します。

  2. [Analytics] の下で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインにある、[My domains] で、Amazon ES ドメインを選択します。

  4. Configure cluster を選択します。

  5. [Node configuration] ペインで [Enable zone awareness] を選択します。

  6. Submit を選択します。

詳細については、EC2 ドキュメントの「リージョンとアベイラビリティーゾーン」を参照してください。

手動インデックススナップショットの使用 (AWS CLI)

スナップショットの設定」で説明したように、Amazon Elasticsearch Service (Amazon ES) は毎日、Amazon ES ドメインでプライマリインデックスのシャードのスナップショットを撮ります。ただし、自動スナップショットを使用して Amazon ES ドメインを復元するには、AWS サポートチームに連絡する必要があります。より大きな柔軟性が必要な場合は、手動でスナップショットを撮影し、撮影されたスナップショットをスナップショットリポジトリである Amazon S3 バケットで管理することもできます。

手動でスナップショットを撮ると、Amazon ES ドメイン全体のデータを移行して、障害から復旧する便利な方法を利用できます。詳細については、Elasticsearch のドキュメントの「スナップショットと復元」を参照してください。サービスは、Amazon ES ドメインと自己管理型の Elasticsearch クラスターの両方で撮影された手動スナップショットから、インデックスを復元して新しいインデックスを作成するためのサポートを提供します。

手動スナップショットでは、AWS サポートが最新の自動スナップショットから復元するのを待たずに、自分で赤のクラスターサービスエラーに対処することもできます。スナップショットリポジトリは、一意の名前で識別された、複数のスナップショットを保持できます。手動インデックススナップショットの詳細な説明については、Elasticsearch ドキュメントの「スナップショットと復元」を参照してください。

注記

Amazon ES ドメインに赤のクラスターエラーが発生した場合、AWS サポートチームが連絡して、お手元の手動インデックススナップショットを使用して問題に対処するか、サポートチームにドメインの最新の自動スナップショットの復元を依頼するかを尋ねる場合があります。7 日以内に応答がない場合、AWS サポートは最新の自動スナップショットを復元します。

スナップショット前提条件

インデックススナップショットを手動で作成するには、IAM および Amazon S3 を使用して作業する必要があります。スナップショットの撮影を試す前に、次の前提条件を満たしていることを確認します。

前提条件 説明
S3 バケット Amazon ES ドメインの手動スナップショットを保存します。詳細については、『Amazon S3 入門ガイド』の「バケットの作成」を参照してください。
IAM ロール Amazon Elasticsearch Service に権限を委任します。ロールの信頼関係は、Principal ステートメントで Amazon Elasticsearch Service を指定する必要があります。ロールタイプは、[Amazon EC2] である必要があります。手順については、IAM ドキュメントの「AWS のサービスにアクセス許可を委任するロールの作成」を参照してください。IAM ロールは、Amazon ES でスナップショットリポジトリを登録するためにも必要です。このロールへのアクセスを持つ IAM ユーザーのみ、スナップショットリポジトリを登録できます。詳細については、「スナップショットリポジトリの登録」を参照してください。
IAM ポリシー Amazon S3 が S3 バケットで実行できるアクションを指定します。このポリシーは、Amazon Elasticsearch Service に権限を委任する IAM ロールに添付する必要があります。このポリシーは、Resource ステートメントに S3 バケットを指定する必要があります。詳細については、『IAM の使用』の「カスタマー管理ポリシーの作成」と「管理ポリシーのアタッチ」を参照してください。

S3 バケット

手動スナップショットを保存する S3 バケットの Amazon リソースネーム (ARN) を書きとめておきます。これは、以下に必要になります。

  • IAM ロールにアタッチされた IAM ポリシーの Resource ステートメント

  • スナップショットリポジトリの登録に使用する Python クライアント

次の例では、S3 バケットの ARN を表します。

Copy
arn:aws:s3:::es-index-backups

詳細については、『Amazon S3 入門ガイド』の「バケットの作成」を参照してください。

IAM ロール

次の例にあるように、ロールはその信頼関係のなかで Service ステートメントの Amazon Elasticsearch Service、es.amazonaws.com, を指定する必要があります。

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

注記

このロールへのアクセスを持つ IAM ユーザーのみ、スナップショットリポジトリを登録できます。

手順については、『IAM 使用ガイド』の「AWS のサービスにアクセス許可を委任するロールの作成」を参照してください。

IAM ポリシー

IAM ポリシーは、ロールにアタッチする必要があります。ポリシーは、Amazon ES ドメイン用に手動スナップショットを保存するために使用する S3 バケットを指定する必要があります。次の例では、es-index-backups バケットの ARN を指定します。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::es-index-backups" ] }, { "Action":[ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "iam:PassRole" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::es-index-backups/*" ] } ] }

手順については、『IAM の使用』の「カスタマー管理ポリシーの作成」と「管理ポリシーのアタッチ」を参照してください。

スナップショットディレクトリの登録

新しいロールへのアクセスを持つ IAM ユーザーは、手動インデックススナップショットを撮る前に、Amazon Elasticsearch Service を使用してスナップショットディレクトリを登録する必要があります。この 1 回限りのオペレーションには、Amazon ES に権限を委任した IAM ロールで、ご自分の AWS リクエストに署名することが必要です。

注記

curl は AWS リクエスト署名をサポートしていないため、これを使用してこのオペレーションを実行することはできません。その代わり、スナップショットディレクトリの登録には Python クライアントのサンプリングを使用します。

Python クライアントのサンプリング

次のサンプルの Python コードを、snapshot.py などの Python ファイルとして保存します。サービスでスナップショットのディレクトリを登録する操作は、1 回限りです。「手動スナップショットの撮影」で説明したように、curlを使用して後続のスナップショットを撮影できます。

サンプルコードで、次を更新する必要があります。

region

スナップショットリポジトリを作成した AWS リージョン

endpoint

Amazon ES ドメインのエンドポイント。

aws_access_key_id

IAM 認証情報

aws_secret_access_key

IAM 認証情報

path

スナップショットリポジトリの場所

注記

Python クライアントでは、スナップショットリポジトリを登録するコンピュータに boto パッケージのバージョン 2.x をインストールする必要があります。

Copy
from boto.connection import AWSAuthConnection class ESConnection(AWSAuthConnection): def __init__(self, region, **kwargs): super(ESConnection, self).__init__(**kwargs) self._set_auth_region_name(region) self._set_auth_service_name("es") def _required_auth_capability(self): return ['hmac-v4'] if __name__ == "__main__": client = ESConnection( region='us-east-1', host='search-weblogs-etrt4mbbu254nsfupy6oiytuz4.us-east-1.es.example.com', aws_access_key_id='my-access-key-id', aws_secret_access_key='my-access-key', is_secure=False) print 'Registering Snapshot Repository' resp = client.make_request(method='POST', path='/_snapshot/weblogs-index-backups', data='{"type": "s3","settings": { "bucket": "es-index-backups","region": "us-east-1","role_arn": "arn:aws:iam::123456789012:role/MyElasticsearchRole"}}') body = resp.read() print body

手動スナップショットの撮影 (AWS CLI)

スナップショットを作成する際、2 つの情報を指定する必要があります。

  • スナップショットリポジトリの名前

  • スナップショットの名前

スナップショットを手動で撮影するには (AWS CLI)

  • 次のコマンドを実行して、手動でスナップショットを撮ります。

    Copy
    curl -XPUT 'http://<Elasticsearch_domain_endpoint>/_snapshot/snapshot_repository/snapshot_name'

次の例は、snapshot_1 というスナップショットを撮り、weblogs-index-backupsスナップショットリポジトリに保存します。

Copy
curl -XPUT 'http://<Elasticsearch_domain_endpoint>/_snapshot/weblogs-index-backups/snapshot_1'

注記

Amazon ES ドメインの容量が大きくなると、スナップショットの撮影に必要な時間は長くなります。長時間実行しているスナップショット操作では、通常次のエラーが発生しています。BotoServerError: 504 GATEWAY_TIMEOUT通常、このエラーは無視して、操作が正常に完了するのを待ってかまいません。次のコマンドを使用して、ドメインのすべてのスナップショットの状態を確認します。

Copy
curl -XGET 'http://<Elasticsearch_domain_endpoint>/_snapshot/<snapshot_repository>/_all?pretty'

手動スナップショットの復元 (AWS CLI)

スナップショットを復元するには、次の手順を実行します。

スナップショットを手動で復元するには (AWS CLI)

  1. Amazon ES ドメイン内のすべてのオープンインデックスを削除または名前変更します。

    復元するインデックスと同じ名前のインデックスがすでにある Elasticsearch クラスターには、インデックスのスナップショットを復元できません。現在、Amazon ES は Elasticsearch _close API をサポートしていないため、代替手段として、次のうちいずれかを使用する必要があります。

    • 同じ Amazon ES ドメインにあるインデックスを削除して、スナップショットを復元する

    • 異なる Amazon ES ドメインにスナップショットを復元する

    次のレデイは、weblogs の既存のインデックスを削除する方法について説明しています。

    Copy
    curl -XDELETE 'http://search-weblogs-abcdefghijklmnojiu.us-east-1.example.com/_all'
  2. スナップショットを復元するには、次のコマンドを実行します。

    Copy
    curl -XPOST 'http://<Elasticsearch_domain_endpoint>/_snapshot/snapshot_repository/snapshot_name/_restore'

    次の例では、snapshot_1スナップショットリポジトリから weblogs-index-backups を復元しています。

    Copy
    curl -XPOST 'http://search-weblogs-abcdefghijklmnojiu.us-east-1.example.com/_snapshot/weblogs-index-backups/snapshot_1/_restore'

Amazon CloudWatch を使用した、クラスターメトリクスと統計情報の監視 (コンソール)

Elasticsearch クラスターは、Elasticsearch を実行し、Amazon ES ドメインを操作するために必要な、1 つ以上のデータノード、オプションの専用マスターノード、ストレージの集合です。Elasticsearch クラスターの各ノードは、パフォーマンスメトリクスを Amazon CloudWatch に 1 分間隔で自動的に送信します。これらの、無料提供のメトリクスを表示するには、Amazon Elasticsearch Service コンソールの [Monitoring] タブを使用します。

統計からは、各メトリクスに対する、幅広い情報が得られます。たとえば、クラスター内のすべてのノードの CPU の平均使用率を算出するには、Average メトリクスの CPUUtilization 統計を表示します。メトリクスはそれぞれ、3 つのカテゴリのうちのどれかに分けられます。

注記

サービスは、メトリクスを 2 週間アーカイブし、その後破棄します。

メトリクスの設定可能な統計情報を表示するには (コンソール)

  1. https://aws.amazon.com に移動し、[Sign In to the Console] を選択します。

  2. [Analytics] の下で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインにある、[My domains] で、Amazon ES ドメインを選択します。

  4. [Monitoring] タブを選択します。

  5. 表示するメトリクスを選択します。

  6. [Statistic] の一覧から統計を選択します。

    各メトリクスに関連する統計の一覧は、クラスターメトリクスの表を参照してください。統計のなかには、特定のメトリクスに関連のないものがあります。たとえば、[Sum] 統計は、[Nodes] メトリクスには意味がありません。

  7. Update graph を選択します。

クラスターメトリクス

サービスは、クラスターに次のメトリクスを提供します。

注記

メトリクスが Amazon Elasticsearch Service コンソールで使用できない場合にクラスターメトリクスを確認するには、Amazon CloudWatch を使用します。

クラスターメトリクス 説明
ClusterStatus.green すべてのインデックスのシャードがクラスターのノードに割り当てられることを示します。

関連する統計: Minimum、Maximum

ClusterStatus.yellow すべてのインデックスのプライマリシャードがクラスターのノードに割り当てられていることを示しますが、少なくとも 1 つのインデックスのレプリカシャードは割り当てられていません。レプリカを割り当てることができる 2 番目のノードがないため、単一ノードクラスターがこのクラスター状態に常に初期化します。緑のクラスター状態を取得するためにノード数を増やすか、Elasticsearch API を使用してインデックスの number_of_replicas の設定を 0 に設定することができます。詳細については、このガイドの「Amazon Elasticsearch Service ドメインの設定」および Elasticsearch ドキュメントの「インデックス設定を更新する」を参照してください。

関連する統計: Minimum、Maximum

ClusterStatus.red 少なくとも 1 つのインデックスのプライマリとレプリカの両方のシャードが、クラスターのノードに割り当てられないことを示します。この状態の一般的な原因は、クラスターの 1 つ以上のデータノードで空きストレージ領域が不足していることです。次に、空きストレージ領域が不足すると、影響を受けるデータノードやノードにサービスがレプリカシャードを分散できず、Red クラスターステータスで、すべての新しいインデックスは開始できません。復旧するには、EBS ベースのストレージを既存のデータノードに追加する、より大きなインスタンスタイプを使用する、インデックスを削除してスナップショットから復元する、のいずれかを実行する必要があります。復旧の手順については、赤のクラスター状態を参照してください。

関連する統計: Minimum、Maximum

Nodes クラスターのノード数の指定。

関連する統計: Minimum、Maximum、Average

SearchableDocuments クラスター内のすべてのインデックスで検索可能なドキュメントの合計数を指定します。

関連する統計: Minimum、Maximum、Average

DeletedDocuments クラスター内のすべてのインデックスで削除されたドキュメントの合計数を指定します。

関連する統計: Minimum、Maximum、Average

CPUUtilization クラスター内のデータノードで使用する CPU リソースの最大パーセンテージを指定します。

関連する統計: Maximum、Average

FreeStorageSpace (Sum) クラスター内のすべてのデータノードの空き容量を、メガバイト単位で指定します。

関連する統計: Sum

FreeStorageSpace (Minimum) クラスター内で最も少ない使用可能な空き容量を持つデータノード 1 つの、空き容量 (メガバイト) を指定します。メトリクスが 0 に到達すると、Amazon ES は ClusterBlockException をスローします。復旧するには、インデックスを削除する、より大きなインスタンスを追加する、既存のインスタンスに EBS ベースのストレージを追加する、のいずれかを実行する必要があります。詳細については、空きストレージ領域の不足からの復旧を参照してください。

関連する統計: Minimum

ClusterUsedSpace クラスター用の合計使用領域 (メガバイト単位) を指定します。Amazon CloudWatch コンソールでこのメトリクスを表示できますが、Amazon Elasticsearch Service コンソールでは表示できません。

関連する統計: Minimum、Maximum

JVMMemoryPressure クラスター内のすべてのデータノードで使用する Java ヒープの最大パーセンテージを指定します。

関連する統計: Maximum

AutomatedSnapshotFailure クラスターの失敗した自動スナップショットの数が指定されます。 1 の値は、自動スナップショットが過去 36 時間、ドメイン用に取られなかったことを示します。

関連する統計: Minimum、Maximum

CPUCreditBalance クラスター内の、データノードに使用できる残りの CPU クレジットを指定します。CPU クレジットは、フル CPU パフォーマンスを 1 分間実現します。詳細については、『Amazon EC2 開発者ガイド』の「CPU クレジット」を参照してください。このメトリクスは、t2.micro.elasticsearcht2.small.elasticsearcht2.medium.elasticsearch の各インスタンスタイプで使用できます。

関連する統計: Minimum

次のスクリーンショットは、前述の表で説明してあるクラスターメトリクスを示します。

専用マスターノードメトリクス

サービスは、専用マスターノードの次のメトリクスを提供します。

専用マスターノードメトリクス 説明
MasterCPUUtilization 専用マスターノードが使用する CPU リソースの最大パーセンテージを指定します。 このメトリクスが 60% に達する場合、インスタンスタイプのサイズを増やすことをお勧めします。

関連する統計: Average

MasterFreeStorageSpace このメトリクスは関係ないため無視できます。 このサービスはデータノードとしてマスターノードを使用しません。
MasterJVMMemoryPressure クラスター内のすべての専用マスターノードで使用する Java ヒープの最大パーセンテージを指定します。 このメトリクスが 85% に達する場合、より大規模なインスタンスタイプに移行することをお勧めします。

関連する統計: Maximum

MasterCPUCreditBalance クラスター内の専用マスターノードで使用できる、残りの CPU クレジットを指定します。CPU クレジットは、フル CPU パフォーマンスを 1 分間実現します。詳細については、『Amazon EC2 開発者ガイド』の「CPU クレジット」を参照してください。このメトリクスは、t2.micro.elasticsearcht2.small.elasticsearcht2.medium.elasticsearch の各インスタンスタイプで使用できます。

関連する統計: Minimum

次のスクリーンショットは、前述の表で説明してある専用マスターノードのメトリクスを示しています。

EBS ボリュームメトリクス

サービスは EBS ボリュームに対して、次のメトリクスを提供します。

EBS ボリュームメトリクス 説明
ReadLatency EBS ボリュームでの読み取り操作のレイテンシーを秒単位で指定します。

関連する統計: Minimum、Maximum、Average

WriteLatency EBS ボリュームでの書き込み操作のレイテンシーを秒単位で指定します。

関連する統計: Minimum、Maximum、Average

ReadThroughput EBS ボリュームでの読み取り操作のスループットを 1 秒あたりのバイト数で指定します。

関連する統計: Minimum、Maximum、Average

WriteThroughput EBS ボリュームでの書き込み操作のスループットを 1 秒あたりのバイト数で指定します。

関連する統計: Minimum、Maximum、Average

DiskQueueDepth EBS ボリュームに対する保留中の入出力 (I/O) リクエストの数を指定します。

関連する統計: Minimum、Maximum、Average

ReadIOPS EBS ボリュームでの読み取り操作の入出力 (I/O) 操作数 (1 秒あたり) を指定します。

関連する統計: Minimum、Maximum、Average

WriteIOPS EBS ボリュームでの書き込み操作の入出力 (I/O) 操作数 (1 秒あたり) を指定します。

関連する統計: Minimum、Maximum、Average

次のスクリーンショットは、前述の表で説明してある EBS ボリュームメトリクスを示します。

AWS CloudTrail での Amazon Elasticsearch Service ドメインの監査

Amazon Elasticsearch Service (Amazon ES) は AWS アカウント、またはその代理によって行われた AWS API 呼び出しをすべて記録するサービスである AWS CloudTrail と統合されています。ログファイルは Amazon S3 バケットに渡されます。これは、バケットにログファイルを書き込む CloudTrail 許可を与えるバケットポリシーを使用して作成、設定したものです。CloudTrail は、Amazon Elasticsearch Service コンソールによって送信されたものを含むすべての Amazon ES 設定サービス API コールを取得します。

CloudTrail により収集された情報を使用して、検索ドメインのアクティビティを監視できます。Amazon ES に対してどのようなリクエストが行われたか (リクエストの実行元 IP アドレス、実行者、実行日時など) を判断できます。CloudTrail の詳細 (設定する方法や有効にする方法など) については、AWS CloudTrail User Guide を参照してください。CloudTrail の S3 バケットを作成し、設定する方法について詳細は、「CloudTrail のAmazon S3 バケットポリシー」を参照してください。

注記

CloudTrail は、Amazon Elasticsearch Service への設定関連の API 呼び出しのみ、イベントをログ記録します。データ関連の API は記録されません。

次の例では、Amazon ES のサンプルの CloudTrail ログを示します。

Copy
{ "Records": [ { "eventVersion": "1.03", "userIdentity": { "type": "Root", "principalId": "000000000000", "arn": "arn:aws:iam::000000000000:root", "accountId": "000000000000", "accessKeyId": "A*****************A" }, "eventTime": "2015-07-31T21:28:06Z", "eventSource": "es.amazonaws.com", "eventName": "CreateElasticsearchDomain", "awsRegion": "us-east-1", "sourceIPAddress": "Your IP", "userAgent": "es/test", "requestParameters": { "elasticsearchClusterConfig": {}, "snapshotOptions": { "automatedSnapshotStartHour": "0" }, "domainName": "your-domain-name", "eBSOptions": { "eBSEnabled": false } }, "responseElements": { "domainStatus": { "created": true, "processing": true, "aRN": "arn:aws:es:us-east-1:000000000000:domain/your-domain-name", "domainId": "000000000000/your-domain-name", "elasticsearchClusterConfig": { "zoneAwarenessEnabled": false, "instanceType": "m3.medium.elasticsearch", "dedicatedMasterEnabled": false, "instanceCount": 1 }, "deleted": false, "domainName": "your-domain-name", "domainVersion": "1.5", "accessPolicies": "", "advancedOptions": { "rest.action.multi.allow_explicit_index": "true" }, "snapshotOptions": { "automatedSnapshotStartHour": "0" }, "eBSOptions": { "eBSEnabled": false } } }, "requestID": "05dbfc84-37cb-11e5-a2cd-fbc77a4aae72", "eventID": "c21da94e-f5ed-41a4-8703-9a5f49e2ec85", "eventType": "AwsApiCall", "recipientAccountId": "000000000000" } ] }

CloudTrail 内の Amazon Elasticsearch Service 情報

AWS アカウントで CloudTrail のログ記録を有効にすると、Amazon Elasticsearch Service (Amazon ES) オペレーションに対する API 呼び出しがログファイルに記録されます。Amazon ES レコードは、他の AWS サービスレコードと一緒にログファイルに記録されます。CloudTrail は、期間とファイルサイズに基づいて、新しいファイルをいつ作成して書き込むかを決定します。

すべての Amazon ES 設定サービスのオペレーションが記録されます。たとえば、CreateElasticsearchDomainDescribeElasticsearchDomainUpdateElasticsearchDomainConfig を呼び出すと、CloudTrail ログファイルにエントリが生成されます。各ログエントリには、誰がリクエストを生成したかに関する情報が含まれます。ログのユーザー ID 情報は、リクエストがルートまたは IAM ユーザーの認証情報を使用して送信されたか、ロールまたはフェデレーションユーザーの一時的なセキュリティ認証情報を使用して送信されたか、あるいは別の AWS サービスによって送信されたかを確認するのに役立ちます。詳細については、userIdentityCloudTrail Event Reference フィールドを参照してください。

必要であれば、バケット内にログファイルを無期限に保存するか、Amazon S3 ライフサイクルのルールを定義して、自動的にログファイルをアーカイブまたは削除することができます。デフォルトでは Amazon S3 のサーバー側の暗号化(SSE)を使用して、ログファイルが暗号化されます。ログファイルの配信時にすぐにアクションを実行する場合、新しいログファイルの配信時に CloudTrail により Amazon SNS 通知を発行することを選択できます。詳細については、「Configuring Amazon SNS Notifications for CloudTrail」を参照してください。また、複数の AWS リージョンと複数の AWS アカウントからの Amazon ES ログファイルを 1 つの Amazon S3 バケットに集約することもできます。詳細については、「Receiving CloudTrail Log Files From Multiple Regions」を参照してください。

Amazon Elasticsearch Service ログファイルエントリの概要

CloudTrail ログファイルには、複数の JSON 形式イベントで構成される 1 つ以上のログエントリを記録できます。ログエントリは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、パラメータ、アクションの日時などに関する情報を含みます。ログエントリは、特定の順序で生成されるわけではなく、パブリック API 呼び出しのスタックトレース順に並んではいません。CloudTrail ログファイルは、Amazon ES 設定サービス API コールだけでなく、AWS アカウントに関するすべての AWS API コールイベントを含みます。ただし、ログファイルを読み取って、eventSource es.amazonaws.com 用にスキャンできます。eventName 要素には、呼びだされた設定サービスアクションの名前が含まれます。

Kibana を使用したデータの可視化

Kibanaは Elasticsearch で稼働するように設計された人気のあるオープンソースの可視化ツールです。Amazon Elasticsearch Service (Amazon ES) は、各 Amazon ES ドメインに、デフォルトで Kibana のインストールを提供しています。Kibana エンドポイントは、サービスコンソールのドメインダッシュボードにあります。Kibana を使用してデータを可視化する方法の詳細については、Kibana ユーザーガイド」を参照してください。

Kibana ローカルサーバーを Amazon ES に接続する

多くのお客様が、ローカルの Kibana サーバーを設定するために、たくさんの時間を費やしてきました。Amazon ES が提供するデフォルトの Kibana インスタンスで作業を繰り返すのではなく、次の変更を加えることで kibana.yml 構成ファイルを編集してローカルの Kibana サーバーを設定し、サービスに接続することができます。

Copy
kibana_index: ".kibana-4" elasticsearch_url: http:<elasticsearch_domain_endpoint>:80

http: プレフィックスを Amazon ES ドメインのエンドポイントに追加する必要があります。

注記

ローカル Kibana サーバーをホストするコンピュータに、IP ベースのアクセスポリシーを設定することをお勧めします。IP ベースのアクセスポリシーは、1 つ以上の特定の IP アドレス、ドメインのリソースへのアクセスを制限します。匿名アクセスを許可するように IP ベースのポリシーを設定することもできます。これにより、未署名のリクエストを Amazon ES ドメインに送信できるようになります。詳細については、「Configuring Access Policies」を参照してください。

Logstash プラグインを使用した、データの一括読み込み

Logstash は、bulk API を使用して S3 プラグインでデータを Amazon ES ドメインにアップロードするのに便利です。サービスは、Elasticsearch が提供する、その他の標準 Logstash 入力のプラグインをすべてサポートします。Amazon ES は、2 つの Logstash 出力プラグインをサポートしています。標準の elasticsearch プラグイン、および Logstash イベントを Amazon ES に署名し、エクスポートする logstash-output-amazon-es プラグイン。

Amazon ES とのやりとりを有効にするには、Logstash のローカルインスタンスをインストールして、Logstash 構成ファイルに次の変更を加える必要があります。

設定フィールド 入力 | 出力プラグイン 説明
bucket Input Amazon ES ドメインに読み込むデータを格納している Amazon S3 バケットを指定します。このサービスエンドポイントは、Amazon Elasticsearch Service コンソールダッシュボードにあります。
region Input Amazon S3 バケットが存在する AWS リージョンを指定します。
hosts 出力 ターゲット Amazon ES ドメイン用にサービスエンドポイントを指定します。
ssl 出力 Amazon ES への接続に SSL を使用するかどうかを指定します。
flush_size 出力

デフォルトでは、全体のバッチを送信する前に、Logstash は5,000 のイベントでバッファがかかります。しかし、ドキュメントのサイズが大きく、100 MB に到達しそうな場合、すぐにバッファがかからないように、flush_size オプションを大きな値で設定することをお勧めします。

flush_size を増大する場合、メモリ不足を引き起こさないように Logstash LS_HEAP_SIZE 環境変数を 2,048 MBに設定することをお勧めします。

詳細については、Elasticsearch のドキュメントの「flush_size」を参照してください。

次の例は、以下を行う Logstash を設定します:

  • 出力プラグインを Amazon ES サービスエンドポイントに指定する

  • 入力プラグインを S3 の wikipedia-stats-log バケットに指定する

  • SSL を使用して Amazon ES に接続する

Copy
input{ s3 { bucket => "wikipedia-stats-log" access_key_id => "lizards" secret_access_key => "lollipops" region => "us-east-1" } } output{ elasticsearch { hosts => "search-logs-demo0-cpxczkdpi4bkb4c44g3csyln5a.us-east-1.es.example.com" ssl => true flush_size => 250000 } }

次の例は、同じ設定ですが、SSL を使用せず Amazon ES に接続しています。

Copy
input{ s3 { bucket => "wikipedia-stats-log" access_key_id => "lizards" secret_access_key => "lollipops" region => "us-east-1" } } output{ elasticsearch { hosts => "search-logs-demo0-cpxczkdpi4bkb4c44g3csyln5a.us-east-1.es.example.com" ssl => false flush_size => 250000 } }

注記

前述の例のサービスリクエストには、署名する必要があります。リクエストの署名の詳細については、「Amazon Elasticsearch Service リクエストの署名」を参照してください。署名して Amazon ES に Logstash イベントをエクスポートするには、logstash-output-amazon-es 出力プラグインを使用します。手順については、「README.md」を参照してください。

Amazon Elasticsearch Service リクエストの署名

使用する言語の SDK が AWS に用意されている場合は、その SDK を使用して Amazon Elasticsearch Service (Amazon ES) リクエストを送信することをお勧めします。AWS SDK を使用するほうが、Amazon ES API を直接使用するよりも、リクエストの署名プロセスがきわめてシンプルで、大幅な時間の節約になります。SDK は開発環境と容易に統合されるため、関連するコマンドへのアクセスが簡単です。

Amazon ES 設定サービスのオペレーション を直接呼び出す場合は、自分のリクエストに署名する必要があります。設定サービスのリクエストには常に署名が必要です。アップロードおよび検索リクエストは、これらのサービスに対する匿名アクセスを設定していないかぎり、署名されている必要があります。

リクエストに署名するには、暗号化ハッシュ関数を使用してデジタル署名を計算します。この関数は入力に基づいてハッシュ値を返します。入力には、リクエストのテキスト、およびシークレットアクセスキーが含まれます。ハッシュ関数から返されるハッシュ値をリクエストに署名として含めます。署名は、リクエストの Authorization ヘッダーの一部です。

Amazon ES は、リクエストを受け取ると、リクエストの署名に使用されたものと同じハッシュ関数と入力を使用して署名を再計算します。再計算された署名とリクエスト内の署名が一致した場合、Amazon ES はリクエストを処理します。それ以外の場合、リクエストは拒否されます。

Amazon ES は、AWS 署名バージョン 4 を使用した認証をサポートします。詳細については、「Signature Version 4 Signing Process」を参照してください。

注記

Amazon ES は、署名して Logstash イベントをサービスにエクスポートするために、Logstash 出力プラグインを提供します。logstash-output-amazon-es plugin をダウンロードして、手順については README.md を参照してください。

Amazon Elasticsearch Service ドメインのタグ付け

Amazon ES タグを使用して、Amazon ES ドメインにメタデータを追加できます。AWS は、タグに意味論的意味を適用しません。タグは文字列として厳密に解釈されます。タグには、次の要件があります。

タグ要素 説明
タグキー タグキーは、必須のタグ名です。タグキーは添付される Amazon ES ドメインで一意にする必要があります。タグキーと値の基本的な制限の一覧については、「ユーザー定義タグの制限」を参照してください。
タグ値 タグ値は、タグの省略可能な文字列値です。タグ値は null を指定できます。また、タグセット内で一意である必要はありません。例えば、project/Trinity と cost-center/Trinity のタグセット内に 1 つのキーと値のペアを使用できます。タグキーと値の基本的な制限の一覧については、「ユーザー定義タグの制限」を参照してください。

各 Amazon ES ドメインには、その Amazon ES ドメインに割り当てられているすべてのタグを格納するタグセットがあります。AWS は Amazon ES ドメインにタグを自動的に設定しません。タグセットには、最大 10 個のタグを格納でき、空にすることもできます。Amazon ES ドメインに追加したタグのキーがそのリソースの既存のタグのキーと同じ場合、既存の値は新しい値によって上書きされます。

これらのタグを使用して、類似のリソースの費用をグループ化することで、コストを追跡できます。Amazon ES ドメインタグは、Amazon ES ドメインを定義して関連付ける名前と値のペアです。その名前はキーと呼ばれます。タグを使用して、Amazon ES ドメインに任意の情報を割り当てることができます。たとえば、タグキーを使用してカテゴリを定義し、タグ値をそのカテゴリのアイテムにすることができます。具体的には、「project」というタグキーと「Salix」というタグ値を定義して、Amazon ES ドメインが Salix プロジェクトに割り当てられていることを示すことができます。また、タグキーとして environment=test や environment=production などを使用して、Amazon ES ドメインがテスト用なのか本稼働用なのかを示すこともできます。Amazon ES ドメインに関連付けられているメタデータの追跡が簡単になるように、一貫した一連のタグキーを使用することをお勧めします。

タグを使用して AWS 請求書を整理し、自分のコスト構造を反映することもできます。そのためには、サインアップして、タグキー値が含まれた AWS アカウントの請求書を取得する必要があります。その後、同じタグキー値を持つリソースに従って請求情報を整理し、結合したリソースのコストを確認します。たとえば、複数の Amazon ES ドメインにキーと値のペアをタグ付けし、請求情報を整理して複数のサービスにおける各ドメインの合計コストを確認できます。詳細については、『AWS 請求情報とコスト管理』の「コスト配分タグの使用」を参照してください。

注記

タグは承認用にキャッシュに格納されます。そのため、Amazon ES ドメインに対するタグの追加や更新には数分かかることがあります。

タグの操作 (コンソール)

以下の手順を使用してリソースタグを作成します。

タグを作成するには (コンソール)

  1. https://aws.amazon.com に移動し、[Sign In to the Console] を選択します。

  2. [Analytics] の下で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインで、Amazon ES ドメインを選択します。

  4. ドメインダッシュボードで、[Manage tags] を選択します。

  5. [Key] 列に、タグキーを入力します。

  6. (オプション) [Value] 列にタグ値を入力します。

  7. Submit を選択します。

タグを削除するには (コンソール)

以下の手順を使用してリソースタグを削除します。

  1. https://aws.amazon.com に移動し、[Sign In to the Console] を選択します。

  2. [Analytics] の下で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインで、Amazon ES ドメインを選択します。

  4. ドメインダッシュボードで、[Manage tags] を選択します。

  5. 削除するタグの横にある [Remove] を選択します。

  6. Submit を選択します。

コンソールを使用したタグの操作の詳細については、『AWS Management Console Getting Started Guide』の「Working with Tag Editor」を参照してください。

タグの操作 (AWS CLI)

AWS CLI で --add-tags コマンドを使用して、リソースタグを作成することができます。

構文

add-tags --arn=<domain_arn> --tag-list Key=<key>,Value=<value>

パラメータ 説明
--arn タグが添付される Amazon ES ドメインの Amazon リソースネーム。
--tag-list スペースで区切られたキーと値のペアの以下の形式のセット: Key=<key>,Value=<value>

次の例は、logs ドメイン用に 2 つのタグを作成します。

Copy
aws es add-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-list Key=service,Value=Elasticsearch Key=instances,Value=m3.2xlarge

remove-tags コマンドを使用して Amazon ES ドメインからタグを削除できます。

構文

remove-tags --arn=<domain_arn> --tag-keys Key=<key>,Value=<value>

パラメータ 説明
--arn タグが添付される Amazon ES ドメインの Amazon リソースネーム (ARN)。
--tag-keys Amazon ES ドメインから削除するスペース区切りのタグ値のセット。

次の例は、logs ドメインから前述の例で作成した 2 つのタグを削除します。

Copy
aws es remove-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-keys service instances

list-tags コマンドで Amazon ES ドメインの既存のタグを表示できます。

構文

list-tags --arn=<domain_arn>

パラメータ 説明
--arn タグが添付される Amazon ES ドメインの Amazon リソースネーム (ARN)。

次の例は、ログドメイン: のすべてのリソースタグをリスト表示します。

Copy
aws es list-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs

タグの操作 (AWS SDK)

AWS SDK では (Android および iOS SDK を除く)、AddTagsListTags および RemoveTags の各オペレーションも含めて、Amazon ES 設定 API リファレンスで定義されたすべてのアクションがサポートされています。AWS SDK のインストールと使用の詳細については、「AWS Software Development Kits」を参照してください。