Elastic Cloud:Elasticsearch Service APIを一般公開
Elastic Cloudコンソールを使えば、デプロイの作成・管理から、請求情報の閲覧、最新リリースの確認まで1か所で行うことができます。Elastic Cloudコンソールは、一般的な管理操作や管理者のタスクを簡単に、直感的に行うことができるユーザーインターフェースです。
管理用のUIは非常に便利ですが、一方で、一般的なタスクやワークフローをAPIで自動化したいというニーズは多くの組織に存在します。とりわけ、デプロイを管理するタスクの自動化には、大きなニーズがあります。この度Elasticは、このような自動化ワークフローを可能にする“Elasticsearch Service API”を一般公開しました。
このAPIは直接統合されていることに加えて、新たにElasticsearch Service APIもサポートするようになったElastic Cloudのコマンドラインインターフェース、Elastic Cloud Control(ecctl)を使うことが可能です。またcloud-sdk-goライブラリを使うことも、他のプログラミング言語でSDKを生成することもできます。
Elasticsearch Service APIを使ったデプロイの作成とスケール方法については後ほどデモンストレーションでご紹介しますが、その前に、APIがメリットをもたらす一般的なシナリオをいくつかご説明します。
CI/CDパイプラインと統合する
Elastic Stackは多くの現場で、運用スタックの不可欠な一部となっています。そのような現場では、クエリの最適化や、Elastic Stackの新バージョンのテストなど、Elasticsearchに影響を与えるアプリに変更を加えることがあります。
CI/CDパイプラインは、たとえば、現行の仕様通りに自動でデプロイを立ち上げ、必要に応じてスナップショットから復元して、運用中クラスターのデータセットを簡単に使えるようにします。これにより、アプリの開発や、運用環境をアップグレードする前のステージング環境において、コード変更に対する即時的なフィードバックが可能になります。
新しいチームやユースケースの導入
Elastic Stackは運用スタックの一部としてだけでなく、アプリとインフラのオブザーバビリティの目的にも使用されています。Elasticは、1つのデプロイを様々な目的に使用するのではなく、可能な場合は、ユースケースやチームを分離し、それぞれ専用のデプロイを使用することを推奨しています。このような設計にすることで、あるチームのリソースインテンシブなユースケースにとって、“Noisy Neighbour”(うるさい隣人)になりうる問題が大幅に緩和されます。
Elasticsearch Serviceのデプロイは、その数に関係なく手軽に管理することができます。さらに今回のリリースで、AnsibleやChef、Puppet、Terraformなどの使い慣れた設定マネージャーやinfrastructure-as-code(コードとしてのインフラ)ツール、あるいは社内ポータルを、ElasticのAPIに簡単に統合することが可能になりました。新しいチームが新規に開発スタックを登録、およびリクエストする場合、ジョブとサイズに適したテンプレートを使ってデプロイを作成し、ニーズに応じてデプロイ構成することができます。この一連の手順を、手動の作業なしに完了させることができます。
デプロイをスケールする
プログラミングでデプロイをスケールアップ、またはスケールダウンすることで、使用量の増加に対応したり、閑散期のコスト削減を図ったりする手法へのニーズは少なくありません。祝日にeコマースサイトのトラフィックが増えるといった事象は比較的予測できる一方、終了間際に予想外の売上が生じてリソースの使用量が変化するなど、予期できないイベントもあります。APIを使えば、このような時間ベース、または使用量ベースのスケーリングワークフローを実装することができます。
ディスク容量やCPU、RAMなどメトリックベースのスケールについては、常に留意すべきいくつかのポイントがあります。たとえば、スケールダウンした後も十分なディスク容量を確保して、現在のディスク使用量をサポートできるようにしなければならない、といったことです。
Elasticsearch Service APIを使いはじめる
今回は、デプロイの管理のためにユーザーコンソールにログインする必要がなくなるなど、APIの活用でメリットが生じる事例のほんの一部をご紹介します。ここからはいよいよ、Elastic製のコマンドラインツール、ecctl、またはcURLを直接REST APIに使用してデプロイを作成し、スケールする手順を簡単なデモンストレーションで説明してまいります。
1. APIキーを作成する
はじめに、認証用に、アカウント所有者の本人確認に使用するAPIキーを生成する必要があります。APIキーを生成するには、ユーザーコンソールにログインした後、[アカウント]セクションにある、APIキー管理ページを開きます。
複数のAPIキーを生成して、複数のアプリからのアクセス管理や、ほかのキーに影響を与えることなく、あるキーを無効するタスクを簡単に実行することができます。
新しいキーを作成する際、パスワードの再入力を求められます。次にキーに名前を付け、そのキーをコピーするかダウンロードします。このステップが、キーを確認できる唯一の機会です。かならず安全な場所にキーを保管してください。
2. ecctlを設定する
ecctlをはじめて使用する場合は、ecctlをローカルのマシンにインストールする必要があります。(インストールの手順はこちらです。)すでにマシンにecctlをインストールされている場合は、本記事で紹介する全コマンドがサポートされる、バージョン1.0.0-beta3以降であることを確認してください。今回は、cURLを使う事例もご紹介します。ただし、ElasticのAPIとのやり取りがはるかにユーザーフレンドリーであることから、Elasticではecctlの使用を推奨しています。
インストールが完了すると、ecctl init
コマンドを実行して、設定ウィザードを使用できるようになります。プロダクトの選択を促す画面が表示されたら、Elasticsearch Serviceを選択します。デフォルトのアウトプットには、テキストまたはJSONフォーマットを選択します。認証メカニズムにAPIキーを指定し、上の手順で保存したAPIキーを入力してください。
設定をテストして問題がないか判断するには、ecctl deployment list
コマンドを実行して、アクティブなデプロイのリストが返ってくるかどうか確認します。
3. 最初のデプロイを作成する
これですべての準備が整いました。1つ目のデプロイを作成することができます。Elasticsearch Serviceはデプロイテンプレートをサポートしています。デプロイテンプレートを使えば、ユースケースに最適なコンポーネントとハードウェアで、すばやくデプロイを作成することができます。
ElasticのAPIを使ってデプロイを作成する際、使用するテンプレートを指定する必要があり、ペイロードはそのテンプレートのペイロードの期待値に沿っている必要があります。お使いのクラウドプロバイダー、および選択したリージョンで利用できるテンプレートの一覧は、ユーザーガイドでご確認いただけます。
本記事では、GCPアイオワ(us-central1)を選び、I/O最適化テンプレートを指定します。以下のJSONペイロードをコピーして、ファイル名をcreate-deployment.jsonに指定し、保存してください。
JSONペイロード:
{ "name": "created-via-api", "resources": { "elasticsearch": [ { "region": "gcp-us-central1", "ref_id": "main-elasticsearch", "plan": { "cluster_topology": [ { "node_type": { "master": true, "data": true, "ingest": true }, "instance_configuration_id": "gcp.data.highio.1", "zone_count":2, "size": { "resource": "memory", "value":2048 } } ], "elasticsearch": { "version":"7.6.2" }, "deployment_template": { "id": "gcp-io-optimized" } } } ], "kibana": [ { "region": "gcp-us-central1", "elasticsearch_cluster_ref_id": "main-elasticsearch", "ref_id": "main-kibana", "plan": { "cluster_topology": [ { "instance_configuration_id": "gcp.kibana.1", "zone_count":1, "size": { "resource": "memory", "value":1024 } } ], "kibana": { "version":"7.6.2" } } } ], "apm": [ { "region": "gcp-us-central1", "elasticsearch_cluster_ref_id": "main-elasticsearch", "ref_id": "main-apm", "plan": { "cluster_topology": [ { "instance_configuration_id": "gcp.apm.1", "zone_count":1, "size": { "resource": "memory", "value":512 } } ], "apm": { "version":"7.6.2" } } } ] } }
監視クラスターの設定や、スナップショットからの復元など、追加の設定オプションを使用することもできます。本記事では、シンプルに新規のデプロイを作成しています。高可用のElasticsearchクラスターを2つのアベイラビリティゾーンにデプロイし、1つのKibanaインスタンスと、1つのAPMサーバーで構成しています。ここまで来たら、下記のecctlコマンドを実行します。これでデプロイの作成がはじまります。
またElastic Cloudのユーザーコンソールを使って、ユーザーインターフェースに設定した内容と合致するAPIリクエストを出力し、APIに慣れることもできます。
ecctl:
ecctl deployment create -f create-deployment.json
--track
フラグを使って、進行状況を監視することができます。このコマンドだけでなく、他のコマンドの進行状況を見る場合も使えます。他には、使用可能なオプションを確認する--help
フラグがあり、こちらも総じて便利です。
cURLを使う場合、以下のコマンドで同じことを実行できます。
cURL:
curl -XPOST https://api.elastic-cloud.com/api/v1/deployments \ -H "Authorization:ApiKey <API_KEY>" \ -d @create-deployment.json
レスポンスから、リクエストが正常に送信され、デプロイIDが返されたことがわかります。デプロイIDは次の手順でスケールする際に必要となるので、コピーしておきます。またデプロイIDは、elastic
ユーザー用ににランダムに生成されたパスワードを含んでいます。これを使ってすぐにKibanaにログインしたり、Elasticsearch REST APIを使ってデプロイをさらに詳しく設定したり、使いはじめたりすることができます。
4. デプロイをスケールさせる
ここまでの手順ですでにデプロイは立ち上がっています。ここからは、スケールの方法を解説します。本記事では、データノードのサイズを4,096MBから8,192MBに引き上げてみます。変更は、Elasticsearchクラスターだけに適用します。したがって、重要なポイントとして、prune_orphansフィールドをfalseに設定し、デプロイに含まれる他のコンポーネント(このケースではKibanaとAPM)が削除されないように指定する必要があります。
以下のJSONペイロードをコピーして、ファイル名をupdate-deployment.jsonに指定し、保存してください。
JSONペイロード:
{ "prune_orphans": false, "resources": { "elasticsearch": [ { "region": "gcp-us-central1", "ref_id": "main-elasticsearch", "plan": { "cluster_topology": [ { "zone_count":2, "node_type": { "master": true, "data": true, "ingest": true, "ml": false }, "instance_configuration_id": "gcp.data.highio.1", "size": { "resource": "memory", "value":4096 } } ], "elasticsearch": { "version":"7.6.2" }, "deployment_template": { "id": "gcp-io-optimized" } } } ] } }
今回は、アップデートコマンドを使用します。
ecctl:
ecctl deployment update <DEPLOYMENT_ID> -f update-deployment.json
cURLを使用する場合、PUTメソッドを使用して新しいプランを送信します。
cURL:
curl -XPUT https://api.elastic-cloud.com/api/v1/deployments/<DEPLOYMENT_ID> \ -H "Authorization:ApiKey <API_KEY>" \ -d @update-deployment.json
場合によっては、完了前にプランをキャンセルしたくなることがあるかもしれません。ecctlでは、タイプとして“elasticsearch”を渡してプランコマンドをキャンセルすることができます。cURLの場合は、保留中のプランを削除するリクエストを送信し、Elasticsearch ref-id(例:“main-elasticsearch”)を指定します。
ecctl:
ecctl deployment plan cancel <DEPLOYMENT_ID> --kind elasticsearch
cURL:
curl -XDELETE https://api.elastic-cloud.com/api/v1/deployments/<DEPLOYMENT_ID>/elasticsearch/main-elasticsearch/plan/pending \ -H "Authorization:ApiKey <API_KEY>"
5. クリーンアップ
最後に、シャットダウンコマンドを使い、作成したデプロイを削除する手順を見てみましょう。
ecctl:
ecctl deployment shutdown <DEPLOYMENT_ID>
破棄のアクションを送信すると、ecctlが実行前に確認のメッセージを表示します。--force
をグローバルフラグとして使うことができます。自動化に使うと便利なフラグです。
cURLでは、以下のリクエストを送信します。
cURL:
curl -XPOST https://api.elastic-cloud.com/api/v1/deployments/<DEPLOYMENT_ID>/_shutdown \ -H "Authorization:ApiKey <API_KEY>"
まとめ
本記事では、デプロイの自動化に適した様々なユースケースをご紹介したほか、デプロイを作成、スケール、シャットダウンする方法もご説明しました。ご紹介した手順のほかにも、ElasticのAPIを使ってさまざまなプロセスを自動化したり、デプロイの管理に必要な手動の操作を減らしたりすることができます。
利用できるAPIエンドポイントの完全なリストは、ユーザーガイドのRESTful APIセクションにあるAPIの例でご覧いただくことができます。
Elasticsearch Serviceの導入をご検討中ですか?14日間無料のトライアルに登録してお試しください。