Windows - TECH PLAY - TECH PLAY

TECH PLAY

Windows

イベント

マガジン

該当するコンテンツが見つかりませんでした

技術ブログ

Elasticsearchのデータ移行やバックアップを、スナップショット機能を使わずに「もっと手軽に、インデックス単位でサクッと行いたい」と思ったことはありませんか? そんなエンジニアの強い味方になるのが、オープンソースのCLIツール  elasticsearch-dump  (通称:elasticdump)です。 今回は、このツールの基本的な使い方から、実務で役立つ一歩進んだテクニックまでを解説します。 Elasticsearch を運用していると、以下のようなシーンに直面することがよくあります。 開発環境(Develop)の特定のインデックスだけを、ステージング環境(Staging)にサクッとコピーしたい インデックスの「マッピング」や「アナライザー」の設定だけを抽出して使い回したい ローカルファイル(JSON/CSV)にデータを退避させたい これらをGUIや面倒なAPIリクエストなしに、 使い慣れたCLIコマンド一発で解決してくれる のが、今回紹介する elasticsearch-dump です。 目次 1. elasticsearch-dumpとは? 2. クイックスタート:インストール方法 2.1. Node.js環境の用意 2.2. npmによるインストール 3. 基本的な使い方とユースケース 3.1. ユースケース①:開発環境からデータをダンプ 3.1.1. マッピング(構造定義)をダンプ 3.1.2. ドキュメントデータ(実データ)をダンプ 3.2. ユースケース②:特定のデータだけを絞り込んでダンプする(searchBody) 4. 知っておくと便利な一歩進んだ応用テクニック 4.1. データの移行中にオンザフライで変換をかける(–transform) 5. ダンプしたデータのリストア 5.1. マッピングの作成 5.1.1. ローカルで my_index_mapping.json を開く 5.1.2. インデックス名( “my_index” )の階層を除外してコピーする 5.1.3. Kibana Dev Tools (Console) で実行する 5.2. データの登録 5.2.1. _bulk 用の ndjson への変換 5.2.2. Kibana Dev Tools (Console) で実行する 6. まとめ:どんな時に使うべきか? 7. 参考リンク 1. elasticsearch-dumpとは? elasticsearch-dump  は、Elasticsearchのインデックスデータをインポート/エクスポートするためのNode.js製ツールです。[^1] 1 最大の特徴は、「 --input (入力元)から、 --output (出力先)へデータをストリーミングして送る」という極めてシンプルな設計にあります。 入力元と出力先には、ESのURLだけでなく、ローカルのJSON/CSVファイルや、標準入出力(stdin/stdout)、さらにはAWS S3なども直接指定できます。 2. クイックスタート:インストール方法 今回検証した環境は以下の通りです。 OS : Windows 11 (PowerShell) Node.js : v24.18.0 jq : 1.8.2 2.1. Node.js環境の用意 Node.js 公式サイト  よりインストーラーをダウンロードし、インストールします。 ※ホスト環境にNode.jsをインストールしたくない場合は、公式のDockerイメージを利用する方法もありますが、ここでは説明を割愛します。 2.2. npmによるインストール npmを使ってグローバル(またはローカル)にインストールします。 # グローバルインストール npm install elasticdump -g 💡  Windowsでのインストール先について  Windows環境でグローバルインストール( -g )した場合、一般的には下記のパス配下に配置されます。[^2] 2 C:\Users\<ユーザー名>\AppData\Roaming\npm 3. 基本的な使い方とユースケース elasticdump は主に「Analyzer(アナライザー)」「Mapping(マッピング)」「Data(ドキュメントデータ)」の3つのフェーズ( --type )に分けて処理を行います。 (ここでは Analyzer フェーズは省略します。また、–type には settings や policy, alias, template なども指定可能です。詳細は、公式ページを参照してください。) 3.1. ユースケース①:開発環境からデータをダンプ データを JSON 形式でダンプします。通常は「mapping ➔ data」の順にダンプします。 3.1.1. マッピング(構造定義)をダンプ # PowerShellでの実行例(改行は「`」を使用) elasticdump ` --input=http://elasticuser:elasticpassword@develop.es.com:9200/my_index ` --output=my_index_mapping.json ` --type=mapping ⚠️  HTTPS環境(自己署名証明書など)でTLSエラーが出る場合  ElasticsearchがHTTPSでリクエストを受け付けており、証明書エラーが発生する場合は、一時的にTLS検証を無視する環境変数を設定してからコマンドを実行してください。[^3] 3 # PowerShellでの実行例 $env:NODE_TLS_REJECT_UNAUTHORIZED="0" elasticdump ` --input=https://elasticuser:elasticpassword@develop.es.com:9200/my_index ` --output=my_index_mapping.json ` --type=mapping 3.1.2. ドキュメントデータ(実データ)をダンプ elasticdump ` --input=http://elasticuser:elasticpassword@develop.es.com:9200/my_index ` --output=my_index_data.json ` --type=data 💡  Note : 出力ファイルフォーマットは「行区切りのJSON(Line-delimited JSON / NDJSON)」です。ファイル全体が1つの巨大なJSON配列ではないため、ストリーム処理に適しており、メモリ消費を最小限に抑えられます。 3.2. ユースケース②:特定のデータだけを絞り込んでダンプする(searchBody) 「管理者のログだけを抽出したい」「特定の期間のデータだけをバックアップしたい」という場合は、 --searchBody  オプションにElasticsearchのクエリ(DSL)を指定できます。 elasticdump ` --input=http://elasticuser:elasticpassword@develop.es.com:9200/my_index ` --output=my_index_filtered_data.json ` --type=data ` --searchBody='{\"query\":{\"term\":{\"username\":\"admin\"}}}' ※クエリが複雑な場合は、別ファイル(例: search_body.json )に切り出して、 @  接頭辞を用いて読み込ませることも可能です。 ./search_condition/search_body.json { "query": { "term": { "username": "admin" } } } elasticdump ` --input=http://elasticuser:elasticpassword@develop.es.com:9200/my_index ` --output=my_index_filtered_data.json ` --type=data ` --searchBody=@./search_condition/search_body.json 4. 知っておくと便利な一歩進んだ応用テクニック 4.1. データの移行中にオンザフライで変換をかける(–transform) 移行のタイミングで「特定の個人情報フィールドをマスクする」「新しいフィールドを追加する」といった簡易的なETL(Extract/Transform/Load)処理が可能です。 JavaScriptでドキュメントの操作関数を定義しておき、それを呼び出します。 ./transforms/anonymize.js module.exports = function (doc, options) { if (doc._source.email) { // メールアドレスのドメイン部分だけ残してマスクする例 doc._source.email = "anonymized@" + doc._source.email.split('@')[1]; } }; # トランスフォーム用スクリプトを指定して実行 elasticdump ` --input=http://elasticuser:elasticpassword@develop.es.com:9200/my_index ` --output=my_index_transformed_data.json ` --type=data ` --transform=@./transforms/anonymize.js 5. ダンプしたデータのリストア リストア先の環境で  elasticdump  や  curl  を利用できる場合は、それらを利用してリストアするのが簡単ですが、それらを利用できない場合には、ダンプした JSON ファイルを加工して、Dev Tools の Console からデータを投入します。 既存データを壊さないように、必ず  mapping ➔ data  の順でリストアします。 5.1. マッピングの作成 5.1.1. ローカルで my_index_mapping.json を開く エクスポートされたマッピングファイルは、一般的に以下のように「インデックス名」をルートキーに持つ構造になっています。 { "my_index": { "mappings": { "properties": { "title": { "type": "text" }, "price": { "type": "float" } } } } } 5.1.2. インデックス名( “my_index” )の階層を除外してコピーする Kibana Console でインデックスを新規作成する際、宛先インデックス名は URL パス( PUT /<インデックス名> )で指定するため、JSON 内の  "my_index": { ... }  という外枠(ラッパー)は不要です。 内側の  { "mappings": { ... } }  のブロックだけをコピーします。 5.1.3. Kibana Dev Tools (Console) で実行する Kibana の Dev Tools Console を開き、以下のようにリクエストを記述して実行(再生マークのボタンをクリック)します。 PUT /my_index { "mappings": { "properties": { "title": { "type": "text" }, "price": { "type": "float" } } } } 5.2. データの登録 5.2.1. _bulk 用の ndjson への変換 jq コマンドを jqのダウンロードサイト からダウンロードします。 jq コマンドをダウンロード後、my_index_data.json を _bulk  用の ndjson に加工します。 PowerShell と jq の文字コードの相性が悪いので、コマンドプロンプトを経由して jq を実行します。 (jqの実行ファイル名が jq-windows-amd64 の場合) cmd /c 'jqのインストールディレクトリ\jq-windows-amd64 -c "{\"index\":{\"_index\":\"my_index\",\"_id\":._id}}, ._source" my_index_data.json > bulk_formatted.ndjson' 5.2.2. Kibana Dev Tools (Console) で実行する Kibana Dev Toolsで以下のように  POST _bulk  を記述し、その後に続けて  bulk_formatted.ndjson  の内容を貼り付けて実行します。 POST _bulk { "index" : { "_index" : "my_index", "_id" : "1" } } { "title" : "...", "price" : ... } ... 6. まとめ:どんな時に使うべきか? Elasticsearch公式のスナップショット機能(Snapshot/Restore)は非常に強力ですが、S3などの共有リポジトリの登録が必要だったり、クラスタ全体の移行になりがちで、少々「重厚」です。 それに対して、  elasticsearch-dump  は以下のようなシチュエーションで抜群の機動力を発揮します。 開発環境と検証環境間で、数万〜数百万件程度の特定データをパパッと持ち運びたい スキーマ定義(マッピング)だけを手元でバージョン管理したい スナップショットの設定権限がない(AWS OpenSearch Serverless など制限のある環境を含む) 手元の開発環境に一つ入れておくだけで、データ運用の生産性が劇的に向上するおすすめのツールです。ぜひ皆さんのプロダクト運用や開発プロセスにも組み込んでみてください! 7. 参考リンク elasticsearch-dump GitHub公式リポジトリ 実行には事前に Node.js(npm)の実行環境が必要になります。 ↩︎ Windowsのユーザー環境によって、”AppData” フォルダは隠しフォルダになっている場合があるため、エクスプローラーの「表示」設定で「隠しファイル」にチェックを入れてアクセスしてください。 ↩︎ この設定はSSL/TLSの証明書検証を無効化するため、本番環境の公開ネットワーク等で実行する際はセキュリティリスクを考慮し、一時的な利用に留めてください。 ↩︎ The post 【保存版】elasticsearch-dumpで実現する、Elasticsearch の超柔軟なデータ移行・バックアップ手法 first appeared on Elastic Portal .
Workspace IntelligenceのアーキテクチャとGoogle チャットの新たな役割 文脈を読み解く、物知りシステム Google Cloud Next '26で注目された発表の一つが「Workspace Intelligence」の導入です。これは単に検索機能を強化するだけでなく、組織内に点在するメール、チャットログ、ドキュメント、スプレッドシート、プレゼンテーション、外部のウェブ情報を統合し、包括的な「ナレッジグラフ」を構築する基盤システムです。
  Linux初心者がAzure仮想マシンでHTTPサーバーを構築した話 --> こんにちは!新卒でサイオステクノロジーに入社したごままぐろです。 本記事では、Linux初心者が研修で得た学びを以下の構成でご紹介します。LinuxはITパスポートなどの資格勉強で少し知っている程度だったのですが、この度新卒研修の一環としてLinux仮想環境でのサーバ構築を行いました。 これからLinuxを学ぶ方の参考になれば幸いです。 Linuxについて Linuxとは LinuxはWindowsやMacのようなOS(Operating System)の一種です。OSS(Open Source Software)として公開されているため、世界中の開発者が自由にプログラムの中身を確認したりカスタマイズできます。 厳密にいえば、「Linux」とはOSの核心である「カーネル」のことを指すようです。しかし実際には、カーネルに独自の管理ツールやアプリケーションを組み合わせた「Linuxディストリビューション」のことをLinuxと呼ぶことが多いそうです。 有名なLinuxディストリビューションには以下のものがあります。 RedHat系: RHEL、AlmaLinux など Debian系: Debian、Ubuntu など Linuxの特徴 Linuxには以下のような特徴があります。 基本的に文字ベースで操作する データをディレクトリとファイルの入れ子構造で管理する ユーザごとに権限を設定できる 私の場合、このあたりの特徴を掴むのに時間がかかりました。今も完全に理解できているか分からないのですが、私なりの言葉で簡単に説明したいと思います。 LPI-Japanという団体が初学者向けに 「Linux標準教科書」 という資料を公開しているので、正確な情報を知りたい方はそちらを参照してみてください。 1.基本的に文字ベースで操作する Linuxでは、キーボードで命令(コマンド)を入力するCUI(Character User Interface)での操作が基本です。 Linuxのコマンドは基本的に「コマンド」「オプション」「引数」で構成されます。 同じ操作でも、ディストリビューションによっては別のコマンドやオプションが存在する場合があるため、注意が必要です。 2.データをディレクトリとファイルの入れ子構造で管理する Linuxでは、データはディレクトリとファイルの入れ子構造で管理されます。 ディレクトリはフォルダのようなもので、ファイルを整理するための入れ物です。ディレクトリの中にさらにディレクトリを作ることもでき、これを入れ子構造と呼びます。 ファイルを操作する時には、ファイルの住所(パス)を指定する必要があります。パスには、最上位(/ルートディレクトリ)からの絶対パスと、現在のディレクトリからの相対パスがあります。 絶対パス: /home/username/newdir/file1.txt 相対パス:(現在の位置が/home/usernameの場合) newdir/file1.txt 3.ユーザごとに権限を設定できる Linuxには「ユーザ」という概念があります。ユーザには、人がログインして操作を行うためのものの他に、人がログインできず内部でプログラムを動かすためのものもあります。 Linuxでは、ユーザごとに権限を設定できます。権限には、読み取り(r)、書き込み(w)、実行(x)の3種類があります。 例えば、ファイルに何か書き込みたいと思っても、自身が操作するユーザにその権限がなければ書き込むことはできません。 権限を設定するコマンドもあるため、必要に応じて割り当てたり変更する必要があります。 本章の内容は以上です。 次章では、実際にLinux仮想環境を用意してサーバ構築を行った手順をご紹介します。 Linux仮想環境でのサーバ構築 仮想マシン(AzureVM)の用意 Linuxは、コンピュータ(ハードウェア)の機能を管理しプロセスとの仲立ちを行うカーネルと、カーネルに人間の出した命令(コマンド)を翻訳し伝えるシェルで構成されています。 実際にLinuxを動かして学ぶには、コマンドを出す対象となるコンピュータが必要です。 しかし私が現在使っているコンピュータはWindowsという別のシステムが管理しているため、Linuxのコマンドを書いても通じません。 そのため今回は仮想化されたコンピュータである「Azure VM(Virtual Machines)」というクラウドサービスを利用して仮想環境を構築しました。 仮想マシンOSには、「Red Hat Enterprise Linux (RHEL) 9.4」を選択しました。 Windows環境を維持したままLinuxを実際に操作する方法は他にもいろいろあるので、ご自身のパソコンやその他条件に応じて選択することをおすすめします。 仮想マシンにSSH接続 仮想マシンを作成したら、次はそれに接続する必要があります。 今回はSSHという通信プロトコルを使って接続しました。 SSHは暗号化された通信を行うためのプロトコルで、今回のようにコンピュータが手元にない(リモート)場合でも安全に接続することができます。 SSH接続の手順は以下の通りです。 仮想マシン作成時に生成された秘密鍵を自分のパソコンに保存する ターミナル(コマンドプロンプト)を開き、以下のコマンドを実行して接続する ssh -i 秘密鍵のパス ユーザー名@IPアドレス 初回接続時には、ホストキーの確認が求められるので「yes」と入力 HTTP通信に必要なもののインストールと設定 作成した仮想マシンには最低限の機能しかないため、目的に応じて必要な部品や設定を追加する必要があります。 今回は、Webブラウザにアドレスを入力するとWebページが表示されるようにしたかったので、Apacheというものをインストールしました。 1.Azure Portalで受信ポート規則の変更 認証のため受信ポート22番(SSH)を許可する ソースは安全のため自分のIPアドレスに限定する 2.仮想マシン上でApacheのインストール sudo dnf install httpd 3.Apacheの起動と自動起動設定 ・サービスの起動 sudo systemctl start httpd ・自動起動の有効化 sudo systemctl enable httpd 4.RHELの内部ファイアウォールでHTTPトラフィックの許可 ・HTTPの許可 sudo firewall-cmd --add-service=http --permanent ・設定の反映 sudo firewall-cmd --reload 5.Azure Portalで受信ポート規則の変更 Webページを閲覧するため受信ポート80番(HTTP)を許可する ソースは自分のIPアドレスに限定する 表示するコンテンツの作成 Apacheのデフォルト設定では、「/var/www/html」ディレクトリにHTMLファイルを置くことで、Webページとして表示されるコンテンツを作成できます。 今回は、以下のコマンドで「index.html」を作成しました。 sudo vi /var/www/html/index.html Linuxでファイルを編集するには、viエディタなどのテキストエディタを使用します。 viエディタには実際に中身を編集するインサートモードと、ファイルの保存や終了などの操作を行うコマンドモードがあります。 慣れないうちは操作が難しく、何度かパニックになりました。   Webページの表示確認 Webブラウザに仮想マシンのIPアドレスを入力すると、作成したWebページが表示されます。 Azure Portalの受信ポート規則でソースを自分のIPアドレスに限定しているため、他のIPアドレスからはアクセスできません。 感想とまとめ 以上が今回のサーバ構築で行った内容でした。全くの初心者の私にとっては非常に充実した経験となりました。 実はこの後も様々な学習を続けており、現在は認証認可というもっと高度な設定に挑戦しています。余裕があれば現在取り組んでいる内容もまとめたいと思っているため、また機会があればよろしくお願いします。 長くつたない文章を最後までお読みいただき、ありがとうございました。 ご覧いただきありがとうございます! この投稿はお役に立ちましたか? 役に立った 役に立たなかった 1人がこの投稿は役に立ったと言っています。 The post Linux初心者がAzure仮想マシンでHTTPサーバを構築した話 first appeared on SIOS Tech Lab .

動画

該当するコンテンツが見つかりませんでした

書籍