Amazon Elasticsearch Service
開発者ガイド (API バージョン 2015-01-01)

Amazon Elasticsearch Service ドメインの作成と設定

この章では、Amazon Elasticsearch Service (Amazon ES) ドメインを作成して設定する方法について説明します。An Amazon ES domain is synonymous with an Elasticsearch cluster. Domains are clusters with the settings, instance types, instance counts, and storage resources that you specify.

開始方法チュートリアルの簡単な手順とは異なり、この章ではすべてのオプションについて説明し、関連するリファレンス情報を提供します。Amazon ES コンソール、AWS Command Line Interface (AWS CLI)、または AWS SDK の手順を使用することで、各手順を完了できます。

Amazon ES ドメインの作成

このセクションでは、Amazon ES コンソールを使用するか、AWS CLI で create-elasticsearch-domain コマンドを使用して Amazon ES ドメインを作成する方法について説明します。AWS CLI の手順には、構文と例が含まれます。

Amazon ES ドメイン (コンソール) の作成

次の手順に従って、コンソールを使用することで Amazon ES ドメインを作成します。

Amazon ES ドメイン (コンソール) を作成するには

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. [Create a new domain (新しいドメインの作成)] を選択します。

    または、これが AWS リージョンで最初の Amazon ES ドメインの場合は、[使用を開始] を選択します。

  4. [デプロイタイプの選択] で、ドメインの目的に最も一致するオプションを選択します。

    • [本番稼働用] ドメインでは、マルチ AZ と専用マスターノードが使用されます。可用性を高めるために使用します。

    • [開発およびテスト] ドメインでは、単一のアベイラビリティーゾーンが使用されます。

    • [カスタム] ドメインでは、すべての設定オプションから選択できます。

    重要

    デプロイタイプが異なると、後続の画面のオプションが異なります。包括的に説明するため、これらのステップにはすべてのオプション ([カスタム] デプロイタイプ) が含まれています。

  5. [Elasticsearch のバージョン] では、最新バージョンの選択をお勧めします。詳細については、「サポートされる Elasticsearch バージョン」を参照してください。

  6. [Next (次へ)] を選択します。

  7. [Elasticsearch ドメイン名] に、ドメイン名を入力します。名前は次の基準を満たしている必要があります。

    • アカウントおよびリージョンに固有

    • 先頭が小文字

    • 3 ~ 28 文字

    • 小文字の a ~ z、0 ~ 9 の数字、ハイフン (-) のみ含まれる

  8. [アベイラビリティーゾーン] で、1-AZ、2-AZ、または 3-AZ を選択します。詳細については、「マルチ AZ ドメインの設定」を参照してください。

  9. [インスタンスタイプ] で、データノードのインスタンスタイプを選択します。詳細については、「サポートされるインスタンスタイプ」を参照してください。

    注記

    すべてのアベイラビリティーゾーンですべてのインスタンスタイプがサポートされているわけではありません。[3-AZ] を選択した場合、R4 や I3 など、現行世代のインスタンスタイプの選択が推奨されます。

  10. [インスタンス数] で、データノードの数を選択します。

    最大値については、「クラスターとインスタンスの制限」を参照してください。単一ノードのクラスターは、開発とテスト用に適切ですが、本稼働のワークロードには使用しないでください。ガイダンスについては、「Amazon ES ドメインのサイジング」および「マルチ AZ ドメインの設定」を参照してください。

  11. (オプション) 専用マスターノードを有効または無効にします。専用マスターノードは、クラスターの安定性を高めます。また、インスタンス数が 10 を超えるドメインに必要です。本番稼働用ドメインには、3 つの専用マスターノードをお勧めします。

    注記

    専用マスターノードおよびデータノードの異なるインスタンスタイプを選択できます。たとえば、データノードの汎用またはストレージ最適化インスタンスを選択できますが、専用マスターノードのコンピューティング最適化インスタンスは選択できません。

  12. [ストレージタイプ] で、[インスタンス] (デフォルト) または [EBS] を選択します。

    インデックスが大きいドメインや、インデックスの数が多いドメインは、多くの場合 EBS ボリュームの大きいストレージ容量の恩恵を受けることができます。特に大きなドメインを作成する際のガイダンスについては、「ペタバイト規模」を参照してください。[EBS] を選択した場合、以下のオプションが表示されます。

    1. [EBS volume type (EBS ボリュームタイプ)] で、EBS ボリュームタイプを選択します。

      EBS ボリュームタイプに [Provisioned IOPS (SSD) (プロビジョンド IOPS) (SSD)] を選択した場合、[Provisioned IOPS (プロビジョンド IOPS)] に必要なベースライン IOPS パフォーマンスを入力します。詳細については、Amazon EC2 のドキュメントの「Amazon EBS ボリューム」を参照してください。

    2. [EBS volume size (EBS ボリュームサイズ)] に、各データノードにアタッチする EBS ボリュームのサイズを入力します。

      [EBS volume size (EBS ボリュームサイズ)] はノードあたりのサイズです。Amazon ES ドメインの合計クラスターサイズは、データノードの数を EBS ボリュームサイズで乗算して計算できます。EBS ボリュームの最小サイズと最大サイズは、指定された EBS ボリュームタイプとそれがアタッチされるインスタンスタイプの両方によって異なります。詳細については、「EBS ボリュームサイズの制限」を参照してください。

  13. (オプション) ノード間の暗号化を有効にするには、[ノード間の暗号化] チェックボックスをオンにします。詳細については、「Amazon Elasticsearch Service のノード間の暗号化」を参照してください。

  14. (オプション) 保管時のデータの暗号化を有効にするには、[保管時のデータの暗号化の有効化] チェックボックスをオンにします。

    ユーザーに代わって Amazon ES に KMS 暗号化キーを作成させる (あるいは、すでに作成されている場合) には、[(デフォルト) aws/es] を選択します。そうでない場合は、[KMS master key (KMS マスターキー)] メニューから独自の KMS 暗号化キーを選択します。詳細については、「Amazon Elasticsearch Service の保管時のデータの暗号化」を参照してください。

  15. [自動スナップショットの開始時間] で、Amazon ES が自動スナップショットを作成するためにトラフィックの少ない時間帯を選択します。

    詳細と推奨事項については、「自動スナップショットの設定」を参照してください。

  16. (オプション) [Advanced options (詳細オプション)] を選択します。オプションをまとめた一覧については、「詳細オプションの設定」を参照してください。

  17. [Next (次へ)] を選択します。

  18. [アクセスの設定] ページの [ネットワーク構成] セクションで、[VPC アクセス] あるいは [パブリックアクセス] のどちらかを選択します。[パブリックアクセス] を選択した場合は、次のステップに進みます。[VPC access (VPC アクセス)] を選択する場合、前提条件を満たしていることを確認してから、次の操作を行います。

    1. [VPC] では、使用する VPC の ID を選択します。

      注記

      VPC とドメインが同じ AWS リージョンに存在している必要があり、テナントが [Default (デフォルト)] に設定されている VPC を選択する必要があります。Amazon ES​ は専有テナントを使用する VPC をまだサポートしていません。

    2. [Subnet (サブネット)] では、1 個のサブネットを選択します。マルチ AZ を有効にした場合は、2 個または 3 個のサブネットを選択する必要があります。Amazon ES は VPC エンドポイントと Elastic Network Interfaces (ENI) を複数のサブネットに配置します。

      注記

      1 個のサブネット (または複数のサブネット) のネットワークインターフェースにで十分な IP アドレスをリザーブする必要があります。詳細については、「VPC サブネットで IP アドレスをリザーブする」を参照してください。

    3. [Security groups (セキュリティグループ)] で、Amazon ES ドメインにアクセスするために必要な VPC セキュリティグループを選択します。詳細については、「Amazon Elasticsearch Service ドメインの VPC サポート」を参照してください。

    4. [IAM role (IAM ロール)] は、デフォルトロールのままにしておきます。Amazon ES では、この事前定義されたロール (サービスにリンクされたロールとも呼ばれる) を使用して VPC にアクセスし、VPC のサブネットに VPC エンドポイントとネットワークインターフェースを配置します。詳細については、「VPC アクセス用のサービスにリンクされたロール」を参照してください。

  19. (オプション) ログインページで Kibana を保護する場合は、[Enable Amazon Cognito for authentication (Amazon Cognito で認証を有効にする)] を選択します。

    1. Kibana 認証に使用する Amazon Cognito ユーザープールと ID プールを選択します。これらのリソースの作成のガイダンスについては、「Kibana の Amazon Cognito 認証」を参照してください。

  20. [Set the domain access policy to (ドメインアクセスポリシーの設定)] では、[Select a template (テンプレートを選択)] のダウンリストから事前定義されたポリシーを選択し、使用するドメインの必要性に応じて編集します。または、アクセスポリシーの追加または編集ボックスで Identity and Access Management (IAM) ポリシーステートメントを 1 つ以上追加することもできます。詳細については、「Amazon Elasticsearch Service アクセスコントロール」、「アクセス ポリシーの設定」、および「VPC ドメインのアクセスポリシーについて」を参照してください。

    注記

    ステップ 16 で [VPC access (VPC アクセス)] を選択した場合は、IP ベースのポリシーテンプレートはドロップダウンリストで使用できず、手動で IP ベースのポリシーを設定できません。代わりに、どの IP アドレスがドメインにアクセスできるかを制御するセキュリティグループを使用できます。詳細については、「VPC ドメインのアクセスポリシーについて」を参照してください。

  21. [Next (次へ)] を選択します。

  22. [Review (レビュー)] ページで、ドメイン設定を確認し、[Confirm (確認)] を選択します。

Amazon ES ドメインの作成 (AWS CLI)

コンソールを使用して Amazon ES ドメインを作成する代わりに、AWS CLI を使用できます。次の構文を使用して Amazon ES ドメインを作成します。構文については、「AWS CLI コマンドリファレンス」の「Amazon Elasticsearch Service」を参照してください。

コマンド例

この最初の例は、以下の Amazon ES ドメイン設定を示しています。

  • Elasticsearch バージョン 5.5 を使用して、weblogs という名前の Amazon ES ドメインを作成します。

  • m4.large.elasticsearch インスタンスタイプの 2 つのインスタンスをドメインに追加する

  • 各データノードのストレージに 100 GiB 磁気ディスクの EBS ボリュームを使用する

  • 単一の IP アドレス 192.0.2.0/32 からのみ匿名アクセスを許可する

aws es create-elasticsearch-domain --domain-name weblogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=100 --access-policies '{"Version": "2012-10-17", "Statement": [{"Action": "es:*", "Principal":"*","Effect": "Allow", "Condition": {"IpAddress":{"aws:SourceIp":["192.0.2.0/32"]}}}]}'

次の例は、以下の Amazon ES ドメイン設定を示しています。

  • Elasticsearch バージョン 5.5 を使用して、weblogs という名前の Amazon ES ドメインを作成します。

  • m4.large.elasticsearch インスタンスタイプの 6 つのインスタンスをドメインに追加する

  • 各データノードのストレージに 100 GiB 汎用 (SSD) EBS ボリュームを使用する

  • サービスへのアクセスを、ユーザーの AWS アカウント ID 555555555555 によって識別される単一のユーザーに制限する

  • 3 つのアベイラビリティーゾーンへのインスタンスの分散

aws es create-elasticsearch-domain --domain-name weblogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=6,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3} --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::555555555555:root" }, "Action":"es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/logs/*" } ] }'

次の例は、以下の Amazon ES ドメイン設定を示しています。

  • Elasticsearch バージョン 5.5 を使用して、weblogs という名前の Amazon ES ドメインを作成します。

  • m4.xlarge.elasticsearch インスタンスタイプの 10 個のインスタンスをドメインに追加する

  • 専用マスターノードとして機能する m4.large.elasticsearch インスタンスタイプの 3 つのインスタンスをドメインに追加する

  • ストレージに 100 GiB プロビジョンド IOPS EBS ボリュームを使用し、各データノードに 1000 IOPS のベースラインパフォーマンスを設定する

  • アクセスを単一のユーザーと単一のサブリソース _search API に制限する

  • インデックスの毎日の自動スナップショットを 03:00 UTC に設定する

aws es create-elasticsearch-domain --domain-name weblogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=10,DedicatedMasterEnabled=true,DedicatedMasterType=m4.large.elasticsearch,DedicatedMasterCount=3 --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,Iops=1000 --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::555555555555:root" }, "Action": "es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/mylogs/_search" } ] }' --snapshot-options AutomatedSnapshotStartHour=3

注記

Amazon ES ドメインを作成する際に、同じ名前のドメインが既に存在しても、CLI からエラーは報告されません。その代わりに、既存ドメインの詳細が返されます。

Amazon ES (AWS SDK) ドメインの作成

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

Amazon ES ドメインの設定

増大するトラフィックとデータの要求に対応するには、次のいずれかの変更で Amazon ES ドメイン設定を更新できます。

  • インスタンス数を変更する

  • インスタンスタイプを変更する

  • 専用マスターノードを有効または無効にする

  • マルチ AZ を有効または無効にする

  • ストレージ設定を行う

  • ドメインインデックスの自動スナップショットの開始時間を変更する

  • VPC サブネットとセキュリティグループを変更する

  • 詳細オプションを設定する

注記

ストレージに EBS ボリュームを使用するようにドメインを設定する方法については、「EBS ベースのストレージの設定」を参照してください。

Amazon ES ドメイン (コンソール) の設定

次の手順に従って、コンソールを使用することにより Amazon ES の設定を更新します。

Amazon ES ドメイン (コンソール) を設定するには

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、更新するドメインを選択します。

  4. [Configure cluster (クラスターの設定)] を選択します。

  5. [Configure cluster (クラスターの設定)] ページで、ドメインの設定を更新します。

    1. データノードのインスタンスタイプを変更する場合、[Instance type (インスタンスタイプ)] で新しいインスタンスタイプを選択します。

      Amazon ES がサポートするインスタンスタイプのリストについては、「サポートされるインスタンスタイプ」を参照してください。

    2. インスタンス数を変更する場合、[インスタンス数] で 1 ~ 20 の整数を選択します。ドメインあたり 200 インスタンスへの引き上げをリクエストするには、AWS サポートセンターでサポートケースを作成してください。

    3. クラスターの安定性を高める場合や、ドメインの数が 10 より多い場合、クラスターで専用マスターノードを有効にします。詳細については、「専用マスターノード」を参照してください。

      1. [専用マスターインスタンス] チェックボックスをオンにします。

      2. [専用マスターインスタンスタイプ] で、専用マスターノードのインスタンスタイプを選択します。

      3. [専用マスターインスタンス数] で、専用マスターノードのインスタンス数を選択します。

    4. マルチ AZ を有効または無効にする場合、[1-AZ]、[2-AZ]、または [3-AZ] を選択します。詳細については、「マルチ AZ ドメインの設定」を参照してください。

    5. サービスが Amazon ES ドメインのプライマリインデックスシャードの自動スナップショットを毎日作成する時間を変更する場合、[自動スナップショットの開始時間] で新しい時間を選択します。

    6. ドメインを作成したときに VPC アクセスを有効にしていない場合には、ステップ 7 に進みます。VPC アクセスを有効にした場合は、VPC エンドポイントが配置されるサブネットを変更でき、セキュリティグループも変更できます。

      1. [Subnets (サブネット)] では、1 個のサブネットを選択します。このサブネットには、ネットワークインターフェースに十分な数の IP アドレスのリザーブが必要です。マルチ AZ を有効にした場合、2 つまたは 3 つのサブネットを選択する必要があります。サブネットは、同じリージョン内の異なるアベイラビリティーゾーンに存在している必要があります。詳細については、「Amazon Elasticsearch Service ドメインの VPC サポート」を参照してください。

      2. [Security groups (セキュリティグループ)] で、ドメインにアクセスするために必要なセキュリティグループを追加します。

    7. (オプション) [Advanced options (詳細オプション)] を選択します。オプションをまとめた一覧については、「詳細オプションの設定」を参照してください。

    8. [Submit] を選択します。

Amazon ES ドメインの設定 (AWS CLI)

AWS CLI を使用して Amazon ES クラスターを設定するには、elasticsearch-cluster-config オプションを使用します。構文については、「AWS CLI コマンドリファレンス」の「Amazon Elasticsearch Service」を参照してください。

コマンド例

次の例では、3 つのアベイラビリティーゾーン間で分散されている m4.large.elasticsearch インスタンスタイプの 2 つのインスタンスが存在する Elasticsearch バージョン 5.5 で mylogs という名前の Amazon ES ドメインを作成します。

aws es create-elasticsearch-domain --domain-name mylogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2,DedicatedMasterEnabled=false,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3}

ただし、ネットワークトラフィックが増加し、ドキュメントの数量とサイズが増加するに伴って、新しい Amazon ES ドメインを再設定する可能性があります。たとえば、大きいインスタンスタイプを使用して、使用するインスタンスを増やし、専用マスターノードを有効にすることができます。次の例では、これらの変更でドメイン設定を更新します。

aws es update-elasticsearch-domain-config --domain-name mylogs --elasticsearch-cluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=3,DedicatedMasterEnabled=true,DedicatedMasterType=m4.large.elasticsearch,DedicatedMasterCount=3

Amazon ES (AWS SDK) ドメインの設定

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

EBS ベースのストレージの設定

Amazon EBS ボリュームは、1 つの インスタンスにアタッチできるブロックレベルのストレージボリュームです。EBS ボリュームを使用すると、Amazon ES ドメインのストレージリソースをコンピューティングリソースから独立して拡張することができます。EBS ボリュームは、大きいデータセットが存在するが、大きいコンピューティングリソースが必要ないドメインに最も役立ちます。EBS ボリュームは、インスタンスによって提供されるデフォルトのストレージよりかなり大きい容量を持ちます。Amazon Elasticsearch Service​ では、以下の EBS ボリュームタイプがサポートされています。

  • 汎用 (SSD)

  • プロビジョンド IOPS (SSD)

  • マグネティック

注記

EBS ボリュームをプロビジョンド IOPS から非プロビジョンド EBS ボリュームタイプに変更するときは、IOPS 値を 0 に設定します。

警告

現在のところ、EBS ボリュームにアタッチされているデータノードに障害が発生した場合、EBS ボリュームでも障害が発生します。

EBS ベースのストレージの設定 (コンソール)

次の手順に従って、コンソールを使用することで EBS ベースのストレージを有効にします。

EBS ベースのストレージを有効にするには (コンソール)

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、設定するドメインを選択します。

  4. [Configure cluster (クラスターの設定)] を選択します。

  5. [Storage type (ストレージタイプ)] で [EBS] を選択します。

  6. [EBS volume type (EBS ボリュームタイプ)] で、EBS ボリュームタイプを選択します。

    EBS ボリュームタイプに [Provisioned IOPS (SSD) (プロビジョンド IOPS) (SSD)] を選択した場合、[Provisioned IOPS (プロビジョンド IOPS)] に必要なベースライン IOPS パフォーマンスを入力します。

  7. [EBS volume size (EBS ボリュームサイズ)] に、EBS ボリュームに必要なサイズを入力します。

    [EBS volume size (EBS ボリュームサイズ)] はノードあたりのサイズです。Amazon ES ドメインの合計クラスターサイズは、(データノードの数) * (EBS ボリュームサイズ) という式を使用して計算できます。EBS ボリュームの最小サイズと最大サイズは、指定された EBS ボリュームタイプとそれがアタッチされるインスタンスタイプの両方によって異なります。詳細については、「EBS ボリュームサイズの制限」を参照してください。

  8. [Submit] を選択します。

注記

プロビジョンド IOPS EBS ボリュームの IOPS 値は、ボリュームの最大ストレージの 30 倍以下に設定します。たとえば、ボリュームの最大サイズが 100 GiB の場合、3000 を超える IOPS 値を割り当てることはできません。

詳細については、Amazon EC2 のドキュメントの「Amazon EBS ボリューム」を参照してください。

EBS ベースのストレージの設定 (AWS CLI)

AWS CLI を使用して EBS ベースのストレージを設定するには、--ebs-options オプションを使用します。create-elasticsearch-domain コマンドと update-elasticsearch-domain-config コマンドの両方で次の構文が使用されます。

構文

--ebs-options EBSEnabled=<value>,VolumeType=<value>,VolumeSize=<value>,IOPS=<value>

パラメータ 有効な値 説明
EBSEnabled true または false インスタンスにより提供されるストレージではなく、ストレージの EBS ボリュームを使用するかどうかを指定します。デフォルト値は false です。
VolumeType 次のいずれかです。
  • gp2 (汎用 SSD)

  • io1 (プロビジョンド IOPS SSD)

  • standard (マグネティック)

Amazon ES ドメインで使用する EBS ボリュームタイプ。
VolumeSize 整数 各データノードの EBS ボリュームのサイズを GiB で指定します。EBS ボリュームの最小サイズと最大サイズは、指定された EBS ボリュームタイプとそれがアタッチされるインスタンスタイプの両方によって異なります。各インスタンスタイプの最小サイズと最大 EBS サイズを示す表については、「サービスの制限」を参照してください。
IOPS 整数 EBS ボリュームのベースライン I/O パフォーマンスを指定します。このパラメータは、プロビジョンド IOPS (SSD) ボリュームによってのみ使用されます。最小値は 1000 です。最大の値は 16000 です。

注記

プロビジョンド IOPS EBS ボリュームの IOPS 値は、ボリュームの最大ストレージの 30 倍を超える値に設定しないことをお勧めします。たとえば、ボリュームの最大サイズが 100 GiB の場合、3000 を超える IOPS 値を割り当てないでください。各ボリュームタイプのユースケースなどの詳細については、Amazon EC2 のドキュメントの「Amazon EBS ボリュームの種類」を参照してください。

次の例では、10 GiB の汎用 EBS ボリュームを使用して、Elasticsearch バージョン 5.5 の mylogs という名前のドメインを作成します。

aws es create-elasticsearch-domain --domain-name=mylogs --elasticsearch-version 5.5 --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=10

ただし、検索インデックスのサイズが大きくなり、さらに大きい EBS ボリュームが必要になる可能性があります。たとえば、ベースライン I/O パフォーマンスが 3000 IOPS の 100 GiB のプロビジョンド IOPS ボリュームを選択できます。次の例では、それらの変更でドメイン設定を更新します。

aws es update-elasticsearch-domain-config --domain-name=mylogs --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,IOPS=3000

EBS ベースのストレージの設定 (AWS SDK)

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

VPC アクセス設定の変更

ドメインを VPC 内に存在するように設定した場合、Amazon ES コンソールを使用して設定を変更できます。パブリックドメインを VPC ドメインに移行するには、「パブリックアクセスから VPC アクセスに移行する」を参照してください。

VPC アクセスの設定 (コンソール)

次の手順に従って、コンソールを使用して VPC アクセスを設定します。

VPC アクセスを設定するには (コンソール)

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、設定するドメインを選択します。

  4. [Configure cluster (クラスターの設定)] を選択します。

  5. [Network configuration (ネットワークの構成)] セクションの [Subnets (サブネット)] で 1 個のサブネットを選択します。マルチ AZ を有効にした場合、2 つまたは 3 つのサブネットを選択する必要があります。サブネットは、同じリージョン内の異なるアベイラビリティーゾーンに存在している必要があります。詳細については、「Amazon Elasticsearch Service ドメインの VPC サポート」を参照してください。

    注記

    1 個のサブネット (または複数のサブネット) のネットワークインターフェースにで十分な IP アドレスをリザーブする必要があります。詳細については、「VPC サブネットで IP アドレスをリザーブする」を参照してください。

  6. [Security groups (セキュリティグループ)] で、ドメインにアクセスするために必要なセキュリティグループを追加します。

  7. [Submit] を選択します。

Kibana の Amazon Cognito 認証の設定

Kibana の Amazon Cognito 認証」を参照してください。

アクセス ポリシーの設定

Amazon Elasticsearch Service には、Amazon ES ドメインへのアクセスを設定するいくつかの方法が用意されています。詳細については、「Amazon Elasticsearch Service アクセスコントロール」を参照してください。

コンソールは、ドメインの特定のニーズに対応してカスタマイズできる事前定義のアクセスポリシーを提供します。ほかの Amazon ES ドメインからアクセスポリシーをインポートすることもできます。上記のアクセスポリシーが VPC アクセスを操作する方法についての詳細は、「VPC ドメインのアクセスポリシーについて」を参照してください。

アクセスポリシーの設定 (コンソール)

次の手順に従って、コンソールを使用してアクセスポリシーを設定します。

アクセスポリシーを設定するには (コンソール)

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、更新するドメインを選択します。

  4. [Modify access policy (アクセスポリシーの変更)] を選択します。

  5. アクセスポリシーを編集します。

    または、[Select a template (テンプレートを選択)] ドロップダウンリストからいずれかのポリシーテンプレートを選択し、必要に応じてドメイン用に編集することもできます。

    事前設定されたアクセスポリシー 説明
    [Allow or deny access to one or more AWS accounts or IAM users (1 つ以上の AWS アカウントまたは IAM ユーザーにアクセスを許可、または拒否する)] 1 つ以上の AWS アカウントあるいは IAM ユーザーまたはロールにアクセスを許可、または拒否します。
    [Allow access to the domain from specific IP(s) (特定の IP からのドメインへのアクセスを許可)]

    このポリシーは、特定の IP アドレスまたは IP アドレスの範囲への匿名アクセスを制限するために使用されます。

    注記

    ドメインで VPC アクセスを有効にした場合、この事前定義のポリシーは利用できません。代わりに、どの IP アドレスがドメインにアクセスできるかを制御するセキュリティグループを使用できます。詳細については、「VPC ドメインのアクセスポリシーについて」を参照してください。

    [Deny access to the domain (ドメインへのアクセスを拒否する)] このポリシーでは、Amazon ES コンソールを通じたアクセス、またはドメインを作成した AWS アカウントの所有者によるアクセスのみ許可されます。
    [Copy access policy from another domain (別のドメインからアクセスポリシーをコピー)] このテンプレートは、他のドメインから既存のアクセスポリシーをインポートする際に役立ちます。
    [Allow open access to the domain (ドメインへのオープンアクセスを許可)]

    このポリシーは、パブリックエンドポイントのドメインには推奨されません。このポリシーは、ドメインのインデックスを誰もが削除、変更あるいはアクセスする許可を付与します。このポリシーは、テスト専用に用意されたものです。これらの設定を使用するドメインに、機密データをロードしないでください。

  6. [Submit] を選択します。

アクセス ポリシーの設定 (AWS CLI)

AWS CLI を使用してアクセスポリシーを設定するには、--access-policies オプションを使用します。create-elasticsearch-domain コマンドと update-elasticsearch-domain-config コマンドの両方で次の構文が使用されます。

構文

--access-policies=<value>

パラメータ 有効な値 説明
--access-policies JSON Amazon ES ドメインのアクセスポリシーを指定します。

次のリソースベースポリシーの例では、サービスへのアクセスが、Principal ポリシーエレメントにおいてユーザーの AWS アカウント ID 555555555555 により識別される単一のユーザーに制限されます。このユーザーには index1 へのアクセスが許可されますが、ドメインの他のインデックスにはアクセスできません。

aws es update-elasticsearch-domain-config --domain-name mylogs --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow","Principal": {"AWS": "arn:aws:iam::123456789012:root" },"Action":"es:*","Resource":"arn:aws:es:us-east-1:555555555555:domain/index1/*" } ] }'

ヒント

AWS CLI を使用してアクセスポリシーを設定する場合、複数のオンラインツールの 1 つを使用して JSON ポリシーステートメントを小さくできます。

アクセスポリシーの設定 (AWS SDK)

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

自動スナップショットの設定

Amazon Elasticsearch Service では、ドメインのプライマリインデックスシャードとレプリカシャードの数の自動スナップショットが毎日作成されます。デフォルトでは、サービスで自動スナップショットを作成するのは深夜 0 時ですが、サービスの負荷が最も少ない時間を選択する必要があります。

これらのスナップショットの使用方法の詳細については、「スナップショットの復元」を参照してください。

警告

クラスターの状態が赤色の間、サービスは Amazon ES インデックスのスナップショット作成を停止します。緑のヘルスステータスにあるインデックスの場合でも、赤のクラスターに追加するすべてのドキュメントは、このバックアップの欠如によるクラスターエラー時に失われることがあります。データの消失を防止するには、クラスター内のインデックスに追加データをアップロードする前にクラスターの状態を緑色に戻します。詳細については、「赤のクラスター状態」を参照してください。

スナップショットの設定 (コンソール)

次の手順に従って、コンソールを使用して毎日の自動インデックススナップショットを設定します。

自動スナップショットを設定するには (コンソール)

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、更新するドメインを選択します。

  4. [Configure cluster (クラスターの設定)] を選択します。

  5. [Automated snapshot start hour (自動スナップショットの開始時間)] で、サービスが自動スナップショットを作成する新しい時間を選択します。

  6. [Submit] を選択します。

スナップショットの設定 (AWS CLI)

--snapshot-options オプションには次の構文を使用します。オプションの構文は、create-elasticsearch-domain コマンドと update-elasticsearch-domain-config コマンドのどちらでも同じです。

構文

--snapshot-options AutomatedSnapshotStartHour=<value>

パラメータ 有効な値 説明
AutomatedSnapshotStartHour 0 から 23 までの整数 サービスが新しいドメインでインデックスの自動スナップショットを毎日実行する時間 (UTC) を指定します。デフォルト値は 0、つまり深夜 0 時です。これは、スナップショットが深夜 0 時から午前 1 時までのどこかで作成されることを意味します。

次の例では、自動スナップショットを 01:00 UTC に設定します。

aws es update-elasticsearch-domain-config --domain-name mylogs --region us-east-2 --snapshot-options AutomatedSnapshotStartHour=1

スナップショットの設定 (AWS SDK)

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

詳細オプションの設定

詳細オプションを使用して、次のように設定します。

rest.action.multi.allow_explicit_index

HTTP リクエストボディ中で、インデックスへの明示参照を許可するかどうかを指定します。このプロパティを false に設定すると、ユーザーがサブリソースのアクセスコントロールをバイパスできなくなります。デフォルト値は true です。詳細については、「詳細オプションと API に関する考慮事項」を参照してください。

indices.fielddata.cache.size

フィールドデータに割り当てられる Java ヒープスペースの割合を指定します。デフォルトでは、この設定は unbounded です。

注記

多くのお客様が、ローテーションするインデックスのクエリを毎日実行しています。indices.fielddata.cache.size を使用してベンチマークテストを始めることをお勧めします。このとき、ほとんどのユースケースでは JVM ヒープを 40% に設定してください。ただし、非常に大きいインデックスがある場合、さらに大きいフィールドデータキャッシュが必要になることがあります。

indices.query.bool.max_clause_count

Lucene のブールクエリで許可される句の最大数を指定します。デフォルト値は 1024 です。クエリに含まれる句の数が最大数を超えていると、TooManyClauses エラーが発生します。詳細については、Lucene のドキュメントを参照してください。

詳細オプションの設定 (コンソール)

詳細オプションを設定するには (コンソール)

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、更新するドメインを選択します。

  4. [Configure cluster (クラスターの設定)] を選択します。

  5. [Advanced options (詳細オプション)] を選択します。

  6. 必要なオプションを指定して、[Submit (送信)] を選択します。

詳細オプションの設定 (AWS CLI)

--advanced-options オプションには次の構文を使用します。オプションの構文は、create-elasticsearch-domain コマンドと update-elasticsearch-domain-config コマンドのどちらでも同じです。

構文

--advanced-options rest.action.multi.allow_explicit_index=<true|false>, indices.fielddata.cache.size=<percentage_heap>, indices.query.bool.max_clause_count=<int>

パラメータ 有効な値
--advanced-options rest.action.multi.allow_explicit_index=<true|false>
indices.fielddata.cache.size=<percentage_heap>
indices.query.bool.max_clause_count=<int>

次の例では、HTTP リクエストボディにおけるインデックスの明示的な参照を無効にします。また、フィールドデータキャッシュを合計 Java ヒープの 40% に制限します。

aws es update-elasticsearch-domain-config --domain-name mylogs --region us-east-1 --advanced-options rest.action.multi.allow_explicit_index=false, indices.fielddata.cache.size=40

詳細オプションの設定 (AWS SDK)

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

ログの設定

Amazon ES は、Amazon CloudWatch Logs を使用して、3 種類の Elasticsearch ログ (エラーログ、検索スローログ、インデックススローログ) を公開します。これらのログは、パフォーマンスと安定性の問題のトラブルシューティングに役立ちますが、デフォルトでは無効になっています。有効にすると、標準の CloudWatch 料金が適用されます。

注記

エラーログは、バージョン 5.1 以降の Elasticsearch でのみ利用できます。スローログは、すべてのバージョンの Elasticsearch で利用できます。

ログについては、Elasticsearch は、Apache Log4j 2 とその組み込みログレベル (昇順) の TRACEDEBUGINFOWARNERRORFATAL を使用します。

エラーログを有効にすると、Amazon ES によって、WARNERRORFATAL のログ行が CloudWatch に発行されます。また、Amazon ES は、DEBUG レベルの複数の例外 (以下参照) も発行します。

  • org.elasticsearch.index.mapper.MapperParsingException

  • org.elasticsearch.index.query.QueryShardException

  • org.elasticsearch.action.search.SearchPhaseExecutionException

  • org.elasticsearch.common.util.concurrent.EsRejectedExecutionException

  • java.lang.IllegalArgumentException

以下のように、エラーログは多くの状況でトラブルシューティングに役立ちます。

  • Painless スクリプトのコンパイルの問題

  • 無効なクエリ

  • インデックス作成の問題

  • スナップショットの失敗

ログ発行の有効化 (コンソール)

CloudWatch へのログの発行を有効にするには、Amazon ES コンソールを使用する方法が最も簡単です。

CloudWatch へのログの発行を有効にするには (コンソール)

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

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインの [My domains (マイドメイン)] で、更新するドメインを選択します。

  4. [Logs (ログ)] タブで、必要なログの [Enable (有効化)] を選択します。

  5. CloudWatch ロググループを作成するか、既存のロググループを選択します。

    注記

    複数のログを有効にする場合は、各ログを個別にロググループに発行することをお勧めします。分離することで、ログをスキャンしやすくなります。

  6. 適切なアクセス権限を含むアクセスポリシーを選択するか、コンソールに用意された JSON を使用してポリシーを作成します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn" } ] }

    重要

    CloudWatch Logs では、リージョンごとに 10 個のリソースポリシーがサポートされます。複数の Amazon ES ドメインでログを有効にする場合は、この制限に達しないように、複数のロググループを含む広範囲のポリシーを作成して再利用します。

  7. [Enable] を選択します。

    ドメインのステータスが [Active (アクティブ)] から [Processing (処理中)] に変わります。ステータスは、ログの発行が有効になる前に [Active (アクティブ)] に戻る必要があります。このプロセスには最長 30 分かかることがあります。

スローログのいずれかを有効にしている場合は、「スローログの Elasticsearch ログしきい値の設定」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

ログ発行の有効化 (AWS CLI)

ログの発行を有効にする前に、CloudWatch ロググループが必要です。まだロググループがない場合は、次のコマンドを使用して作成できます。

aws logs create-log-group --log-group-name my-log-group

次のコマンドを入力してロググループの ARN を検索し、それを書き留めます

aws logs describe-log-groups --log-group-name my-log-group

これで、このロググループに書き込むためのアクセス許可を Amazon ES に付与できます。ロググループの末尾に近い位置にロググループの ARN を指定する必要があります。

aws logs put-resource-policy --policy-name my-policy --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com"}, "Action":[ "logs:PutLogEvents"," logs:PutLogEventsBatch","logs:CreateLogStream"],"Resource": "cw_log_group_arn"}]}'

重要

CloudWatch Logs では、リージョンごとに 10 個のリソースポリシーがサポートされます。複数の Amazon ES ドメインでスローログを有効にする場合は、複数のロググループが含まれている適用範囲のより広いポリシーを作成して再利用し、この制限に達しないようにします。

最後に、--log-publishing-options オプションを使用して発行を有効化できます。オプションの構文は、create-elasticsearch-domain コマンドと update-elasticsearch-domain-config コマンドのどちらでも同じです。

パラメータ 有効な値
--log-publishing-options SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
ES_APPLICATION_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}

注記

複数のログを有効にする場合は、各ログを個別にロググループに発行することをお勧めします。分離することで、ログをスキャンしやすくなります。

次の例では、指定されたドメインに対して検索およびインデックスのスローログの発行を有効にします。

aws es update-elasticsearch-domain-config --domain-name my-domain --log-publishing-options "SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true},INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-other-log-group,Enabled=true}"

CloudWatch への発行を無効にするには、Enabled=false を使用して同じコマンドを実行します。

スローログのいずれかを有効にしている場合は、「スローログの Elasticsearch ログしきい値の設定」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

ログ発行の有効化 (AWS SDK)

ログの発行を有効にする前に、CloudWatch ロググループを作成してその ARN を取得し、そのロググループに書き込むためのアクセス許可を Amazon ES に付与する必要があります。関連するオペレーションは Amazon CloudWatch Logs API Reference に記載されています。

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

これらのオペレーションには、AWS SDK を使用してアクセスできます。

AWS SDK (Android および iOS SDK を除く) は、Amazon ES 設定 API リファレンスに定義されているすべてのオペレーションをサポートします。これには、--log-publishing-optionsCreateElasticsearchDomainUpdateElasticsearchDomainConfig オプションも含まれます。

スローログのいずれかを有効にしている場合は、「スローログの Elasticsearch ログしきい値の設定」を参照してください。エラーログのみ有効にしている場合は、追加のステップを行う必要はありません。

スローログの Elasticsearch ログしきい値の設定

Elasticsearch では、デフォルトでスローログが無効になっています。CloudWatch へのスローログの発行を有効にしたら、さらに Elasticsearch インデックスごとにログしきい値を指定する必要があります。これらのしきい値は、ログに記録する内容とログレベルを正確に定義します。Elasticsearch バージョンごとに設定はわずかに異なります。

これらの設定は、Elasticsearch REST API を使用して指定します。

PUT elasticsearch_domain_endpoint/index/_settings { "index.search.slowlog.threshold.query.warn": "5s", "index.search.slowlog.threshold.query.info": "2s" }

スローログの正常な発行をテストするには、極度に低い値から開始してログが CloudWatch に表示されることを確認し、その後、しきい値をより有用なレベルに高めていきます。

ログが表示されない場合は、以下を確認してください。

  • CloudWatch ロググループが存在しているかどうか? CloudWatch コンソールを確認します。

  • ロググループに書き込むためのアクセス許可が Amazon ES にあるかどうか? Amazon ES コンソールを確認します。

  • Amazon ES ドメインはロググループに発行するように設定されているかどうか? Amazon ES コンソールを確認するか、AWS CLI​ describe-elasticsearch-domain-config オプションを使用するか、いずれかの SDK を使用して DescribeElasticsearchDomainConfig を呼び出します。

  • Elasticsearch ログしきい値が低くてリクエストが超過していないかどうか? インデックスのしきい値を確認するには、次のコマンドを使用します。

    GET elasticsearch_domain_endpoint/index/_settings?pretty

インデックスのスローログを無効にする場合は、変更したしきい値をデフォルト値の -1 に戻します。

Amazon ES コンソールまたは AWS CLI を使用して CloudWatch への発行を無効にしても、Elasticsearch でのログ生成は停止されません。これらのログの発行が停止されるだけです。スローログが不要になった場合は、インデックスの設定を確認してください。

ログの表示

CloudWatch でアプリケーションとスローログを表示する方法は、その他の CloudWatch ログを表示する方法と同じです。詳細については、Amazon CloudWatch Logs User Guide の「ログデータの表示」を参照してください。

ログを表示する際の考慮事項は以下のとおりです。

  • Amazon ES は、各行の最初の 255,000 文字のみを CloudWatch に発行します。残りのコンテンツは切り捨てられます。

  • CloudWatch では、ログの内容を識別しやすいようにログストリーム名のサフィックスとして -index-slow-logs-search-slow-logs、および -es-application-logs が使用されます。