Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elasticsearch無料ハンズオンセミナーを開催しました

こんにちは、3年目エンジニアの緑川です。
昨日、銀座で当社主催の「Elasticsearch無料ハンズオンセミナー」を開催しました!

f:id:acro-engineer:20190827131739j:plain
ハンズオンの様子
本ハンズオンでは、Elastic Stackの最新バージョンを用いて、
基本的な使い方、データの収集/加工、ダッシュボードによる可視化まで、一通りの流れを体験いただきました。

また、Elastic Stackの有償機能について、Elastic Machine Learning(Elastic ML)を中心に紹介。
シンプルな機能ながら多数のユースケースに対応するElastic MLに、参加者からの質問も多く、注目度の高さを感じました。

いやあ、機械学習のエキスパートでなくても、時系列データの異常検知ができるなんて、本当に便利ですよね〜(^^)

次回は10月上旬に開催予定です。
奮ってご参加ください!

AKSで構築したKubernetesクラスタをElasticStackで監視する (2)AutoDiscover編

こんにちは、アキバです。

前回に引き続き、Azure Kubernetes Service(AKS)を用いて作成した Kubernetesk8sクラスタを ElasticStack で監視する方法について解説します。

第2回の今回は、k8s でデプロイしたコンテナ上で動くミドルウェアの監視を行う方法についてです。

※今回の記事の内容は、ほぼ AKS に依存しません。 kubectl が使える環境なら、どの k8s クラスタでも適用できるでしょう

1.監視対象の構成

監視対象である AKS の Vote サンプルアプリケーションは、以下のような構成で動いています。

Voteアプリケーション構成

Metricbeat には、Redis などのメトリックを監視するためのモジュールが用意されているため、 k8s クラスタでも同じように監視したいと思います。

2.AutoDiscover機能を使う

k8s のように動的にコンテナが起動・終了するようなシステムの場合、起動したコンテナに追従して Filebeat/Metricbeat を設定する必要があります。

前回の記事で、 k8s クラスタの Pod の監視には、DaemonSet という k8s の仕組みで実現できることを学びました。

しかしながら、DaemonSet で起動した Filebeat/Metricbeat は、自分の監視する Pod 上でどのツールが動いているかを知らなければモジュールを適用することができません。

Filebeat/Metricbeat には、 Autodiscover という機能があり、これを利用することで動的に増減するコンテナに追従可能になります。

例として、 Redis が動く azure-vote-back のコンテナに対して Metricbeat の redis モジュールを適用します。

前回 DaemonSet として登録する際に使用した、 metricbeat-kubernetes.yaml ファイルに、コメントアウトされた状態の記述があるので、このコメントを外して設定を追記します。

■設定前:

    # To enable hints based autodiscover uncomment this:
    #metricbeat.autodiscover:
    #  providers:
    #    - type: kubernetes
    #      host: ${NODE_NAME}
    #      hints.enabled: true

■設定後:

    # To enable hints based autodiscover uncomment this:
    metricbeat.autodiscover:
      providers:
        - type: kubernetes
          host: ${NODE_NAME}
          #hints.enabled: true
          templates:
            - condition.equals:
                kubernetes.labels.app: azure-vote-back
              config:
                - module: redis
                  metricsets: ["info", "keyspace"]
                  period: 10s
                  hosts: ["${data.host}:6379"]

上記の例では、「kubernetes.labels.app」という k8s のメトリックで得られるフィールドを見て、「azure-vote-back」だったら redis モジュールを適用するようにしています。 この「condition.equals」をシステムに合わせて設定すれば、その他のモジュールやコンテナへの適用にも応用できるわけです。

3.適用=DaemonSet を更新する

それでは、変更した設定を k8s の DaemonSet に適用します。

既に適用されている DaemonSet がある場合は、削除してから再度適用します。

$ kubectl delete -f metricbeat-kubernetes.yaml
$ kubectl create -f metricbeat-kubernetes.yaml

適用されました。

f:id:acro-engineer:20190730024152p:plain

余談ですが、このダッシュボードは、 Metricbeat からセットアップしたものです。

構築した Kibana サーバに Metricbeat をインストールし、設定後に以下のコマンドで投入しています。(※SSHコンソール上で操作)

$ metricbeat setup --dashboards

まとめ

以上の内容で、 k8s クラスタ上で動的に作成/削除されるコンテナに対して、その種類を見ながら必要なモジュールを適用できることがわかりました。

今回は Redis のみを対象にしましたが、 nginx のメトリックや、あるいは Filebeat を使ってアプリケーション独自のログを監視するといったことも可能になりますので、興味のある方はチャレンジしてみてはいかがでしょうか?

次回は、最後に Elastic APM をアプリケーションに適用してみます。

それでは。

参考文献


Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

  少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

ミャンマーで機械学習ハンズオンセミナーを開催しました

皆さんこんにちは。
@tereka114です。

最近まで私を含め数人でミャンマーの支社へ訪問してきました。
日本と文化や食事が違ったこともあり、エキサイティングで刺激的な毎日でした。
特にミャンマーには独特な食事がいくつもあり、最初は慣れなかったのですが、段々と慣れるものですね😅

ミャンマー訪問中の7/13,7/16に機械学習ハンズオンセミナーを開催しました。
講師は@shin0higuchiと2人で担当し、機械学習の基本から応用まで話しました。
YTU, UITなどのミャンマーのトップクラスの大学生だけでなく、UCSYなど、いくつものコンピュータ大学の先生も参加してくれたのが、日本とは状況が違いますね。
まさか、大学の先生に教える機会が来るとは思わず(しかも英語で)、緊張しました。

f:id:acro-engineer:20190723231553p:plain:w500
講義中の光景

今回開催したセミナーでは次の内容を紹介し、ハンズオンを実施しました。

機械学習が手元で動くのを見て、イメージを持ってもらえたこともあり、活発に質問が出て盛り上がりました。

f:id:acro-engineer:20190723231616p:plain:w500
懇親会の光景

ハンズオンセミナーの終了後、懇親会を開催しました。
参加者から質問攻めにあい、ミャンマーでも機械学習をやりたいといった熱意が伝わってきました。
例えば、機械学習をプロジェクトで使うにはどうすればよいか、これからも勉強したいけれどどんなサイトが良いのかなど多くの質問が飛び交いました。

私は今回、ミャンマーに初めて行き、想像以上に最先端の技術に対する興味と熱気を感じました!
今回のミャンマー訪問、非常にチャレンジングなことができて楽しかったです😃

また、機会があれば行きたいと思います!

P.S. ミャンマー滞在中で一番おいしかったのは、「まんぷく」という焼き肉のお店です。

f:id:acro-engineer:20190716214830j:plain:w500
焼き肉

写真の通り、どうみても日本料理です。実のところ、店も日本の雰囲気ですが、一番おいしいと感じました。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。


世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

AKSで構築したKubernetesクラスタをElasticStackで監視する (1)Infrastructure / Logs UI編

こんにちは、アキバです。

最近、iPad Pro + Apple Pencil 2 を買いました。
元々、社内でも有名な手書きメモ好きなのですが、最強の武器を手に入れた気分で毎日ウハウハしています。

手書きメモばかりでなく、勉強もしようということで、ElasticStack や Azure についても触ったり、調べたりしています。

というところで、今回から複数回に分けて、AKS(Azure Kubernetes Service)を用いて作成した Kubernetesk8sクラスタを ElasticStack で監視する方法について解説します。

第一回目である今回は、k8s クラスタのノードや Pod を Metricbeat / Filebeat で監視します。

k8s のようなスケールイン/アウトを前提としたプラットフォームでクラスタを構築する場合、監視のビューも動的なノード追加/削除に追従できることが求められます。

Elastic Stack には、 このようなクラスタを監視するのに便利な Infrastructure UI や Logs UI が提供されているので、これを使います。

監視の情報は Metricbeat と Filebeat を用いて収集します。 Metricbeat と Filebeat は、それぞれ以下のように Kibana の UI と対応しています。

  • Metricbeat: メトリックデータ → Infrastructure UI
  • Filebeat: ログデータ → Logs UI

概要/前提

ElasticStack はバージョン7.2.0 を用います。

k8s クラスタ、および監視用の Elastic Stack はいずれも東日本リージョン(japaneast)上に構築します。
構成は以下のようになります。

構成図

後ほど説明しますが、AKSk8s 用のリソースグループを自動的に作成します。
このリソースグループは外部から指定することができないため、必然的に、Elastic Stack 用とは異なるリソースグループを使用することになります。

このため、監視を行うために両者の仮想ネットワーク間をピアリング設定により接続しています。

監視対象とするAKSのアプリケーションは、AKSチュートリアルで提供されている Vote サンプルを用います。

AKSチュートリアル

https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-prepare-app

Voteサンプルアプリケーション

このチュートリアルをなぞることで、Vote サンプルを用いた AKSk8s クラスタが構築できます。
したがって、本記事ではAKSクラスタ構築の説明は割愛します。 なお、上記チュートリアルを実行するユーザは、該当のサブスクリプションで(デフォルトのロールでは)所有者になっている必要がありますので注意してください。 (k8s が作成するリソースグループから Azure Container Registry への pull 権限の割り当てを行う際に必要となります)

以降の説明については、AKS で Vote サンプルアプリケーションの動作環境が構築済みであることを前提とします。

Azure のアカウントが「無料使用版」である場合、VMサイズに制約が出る可能性があるため、「従量課金」以上のサブスクリプションをお薦めします。

なお、本記事で説明する手順は Linux 上で Azure CLI を用いて行っています。PowerShell のコマンドを用いる場合は適宜コマンドやパスを読み替えてください。

1.Elasticsearch+Kibana の準備

まずは、監視データを蓄積/可視化するための Elasticsearch + Kibana のサーバを用意しましょう。

Azure には Marketplace に Elasticsearch の構築に便利なテンプレートが用意されています。

github.com

このテンプレートを使用することで、コマンド一発10分程度で Elasticsearchクラスタ + Kibana を Azure 上に構築することができます。

作り直しも比較的簡単に行えるので、勇気をもってパラメータ変更にトライできるのが良いですね。

(1) テンプレートを取得し、パラメータファイルを編集する

取得してきた azure-marketplace の中にある password.parameters.json を編集します。 (今回は、説明を簡単にするためにパスワード認証のVMを作成します。ちゃんとした環境では鍵認証になる ssh.parameters.json を使った方が良いでしょう)

$ cd azure-marketplace
$ vi parameters/password.parameters.json.org

主に変更した箇所は以下の通りです。

パラメータ名 変更値
esVersion 7.2.0
esClusterName (任意)
vmDataDiskCount 1
vmDataNodeCount 1
vmSizeKibana Standard_D1_v2
vmSizeDataNodes Standard_D1_v2
adminUsername esadmin
adminPassword (任意) → OSログイン時のesadminのパスワード
security*Password (任意) → Elasticsearchのパスワード
vNetNewAddressPrefix 192.168.0.0/24
vNetLoadBalancerIp 192.168.0.4
vNetNewClusterSubnetAddressPrefix 192.168.0.0/25
vNetNewAppGatewaySubnetAddressPrefix 192.168.0.128/28

パラメータ設定のポイント

ポイントは以下4点あります。

1. VMサイズ(vmSize~)

今回は東日本リージョンを用いますが、テンプレートのパラメータファイルをそのまま使用すると、該当するVMサイズが存在しないため構築に失敗します。

東日本に限らず、構築するリージョンで提供されているVMサイズを調べるには、以下のコマンドを使用してください。

--size で指定した文字列で始まるVMサイズの一覧が見れます。

$ az vm list-skus --location japaneast --size Standard_D --output table

テンプレートでは Standard_D1 となっていたVMが、本記事執筆時点では Standard_D1_v2 となっていたため、パラメータファイルを書き換えています。

2. DataNode数(vmDataNodeCount)

今回はお試しなので1台構成(Master / DataNode兼用)にしています。 実際にはサイジングを行い、必要なノード数を指定してください。 ※なお、マスタノードを別に用意する指定も可能ですが、ここでは言及しません。

3. セキュリティパスワード(adminPassword/security~Password)

このテンプレートで作成するElasticsearchはデフォルトでSecurityが有効になっています。ここで設定したパスワード(特に securityAdminPassword)を認証時に使用します。

テンプレートが対象としているElasticsearchのバージョンによって、パスワードの種類が増減している場合がありますので、構築時にエラーが出た場合はその内容に従ってパラメータを追加・削除してください。

4. ネットワークアドレス(vNet~)

ピアリングして通信する関係上、AKS が自動的に作成するリソースグループ内の仮想ネットワークのアドレス帯(10.0.0.0/8)と重複しないようにします。 ここでは、192.168.0.0/24 を使用することにしました。

(2) テンプレートを使用した構築

まずは、リソースグループを作成します。

$ az group create -l japaneast -n rgAksMonitorElastic

次に、テンプレートを使用してElasticsearch と Kibana のサーバを構築します。 構築のパラメータは、先ほど編集したファイルを指定します。

$ template_base_uri=https://raw.githubusercontent.com/elastic/azure-marketplace
$ template_version=7.2.0
$ az group deployment create --resource-group "rgAksMonitorElastic" \
  --template-uri ${template_base_uri}/${template_version}/src/mainTemplate.json \
  --parameters @parameters/password.parameters.json

構築に成功すると、JSON形式のメッセージが出力されます。 Kibana にアクセスするためのURL は、このメッセージ内に出力されます。

      "kibana": {
        "type": "String",
        "value": "http://kb-xxxxxxxxxxxxxxx.japaneast.cloudapp.azure.com:5601"
      },

このURLを指定して、ブラウザから Kibana 画面を開くと、ログイン認証画面になります。

Kibanaログイン画面

  • ユーザ名:elastic
  • パスワード:(パラメータファイルに設定した文字列)

でログインしてください。

2.ピアリング設定

ElasticStack 用クラスタの作成に成功したら、 k8sクラスタとの間のピアリング設定を行います。

ピアリング設定は、Azureポータルから行います。(※azure-cli でも可能です)

(1) ピアリングの追加ウィザードを開く

  • Azure ポータルで、仮想ネットワーク:aks-vnet-00000000(AKSクラスタ側)を選択します。
  • 左側のメニューから「ピアリング」を選択します。
  • 上側のコントロールから「追加」を選択します。

(2) 設定値を与えてピアリングを作成する

以下の設定値を与えて、ピアリングを作成します。(ピアリングの名前は一例です)

項目名 設定値
aks-vnet-00000000 から es-net へのピアリングの名前 peerToElasticMonitoring
仮想ネットワークの名前 es-net (rgAksMonitorElastic)
es-net から aks-vnet-00000000 へのピアリングの名前 peerToAksVnet00000000

その他はデフォルト値のまま(仮想ネットワークアクセス許可:有効、転送トラフィック:無効、ゲートウェイ転送:なし)とします。 ピアリングの作成に成功したら、k8s のノードから Elasticsearch サーバにアクセスができるようになります。

3.Filebeat / Metricbeat の設定

k8s の Node、Pod の 情報を Elasticsearch に送るために、 Filebeat と Metricbeat を設定します。

各Beatsは、KubernetesのNode/Podの増減に追従する必要があります。

  • Node/Pod が増えたら、Filebeat/Metricbeatの監視を追加する
  • Node/Pod が減ったら、Filebeat/Metricbeatの監視を削除する

これらを実現するために、Filebeat/Metricbeat は、 k8s の DaemonSet を使って各ノードに適用します。

以下に、DaemonSet で Filebeat/Metricbeat 適用するための設定ファイルが公開されていますので、これを利用します。
(各バージョンごとに用意されているようなので、URL中のバージョンに注意して取得しましょう)

https://raw.githubusercontent.com/elastic/beats/7.2/deploy/kubernetes/filebeat-kubernetes.yaml https://raw.githubusercontent.com/elastic/beats/7.2/deploy/kubernetes/metricbeat-kubernetes.yaml

以下のコマンドで、ローカルに取得します。

$ wget https://raw.githubusercontent.com/elastic/beats/7.2/deploy/kubernetes/filebeat-kubernetes.yaml
$ wget https://raw.githubusercontent.com/elastic/beats/7.2/deploy/kubernetes/metricbeat-kubernetes.yaml

それぞれ、以下の場所に Elasticsearch サーバの IP アドレスを指定する箇所があるので、環境に合わせて変更します。
以下は filebeat-kubernetes.yaml の場合(1か所)です。metricbeat-kubernetes.yaml の場合は 2か所あるので、忘れずに変更してください。

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: kube-system
  labels:
    k8s-app: filebeat
spec:
  template:spec:containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat:7.2.0
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        env:
        - name: ELASTICSEARCH_HOST
          value: 192.168.0.5         ★ここをElasticsearchサーバのIPアドレスに書き換える
        - name: ELASTICSEARCH_PORT
          value: "9200"
        - name: ELASTICSEARCH_USERNAME
          value: elastic
        - name: ELASTICSEARCH_PASSWORD
          value: changeme            ★ここをElasticsearchサーバの認証パスワードに書き換える
  :

変更したら、適用しましょう。

$ kubectl create -f filebeat-kubernetes.yaml
configmap/filebeat-config created
configmap/filebeat-inputs created
daemonset.extensions/filebeat created
clusterrolebinding.rbac.authorization.k8s.io/filebeat created
clusterrole.rbac.authorization.k8s.io/filebeat created
serviceaccount/filebeat created
$ kubectl create -f metricbeat-kubernetes.yaml
configmap/metricbeat-daemonset-config created
configmap/metricbeat-daemonset-modules created
daemonset.extensions/metricbeat created
configmap/metricbeat-deployment-config created
configmap/metricbeat-deployment-modules created
deployment.apps/metricbeat created
clusterrolebinding.rbac.authorization.k8s.io/metricbeat created
clusterrole.rbac.authorization.k8s.io/metricbeat created
serviceaccount/metricbeat created

適用できたら、確認します。
「AVAILABLE」の値が、 k8s のノード数と一致すれば成功です。

$ kubectl get ds -n=kube-system
NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
filebeat     1         1         1       1            1           <none>                        73s
metricbeat   1         1         1       1            1           <none>                        66s

3.Kibana 画面で見る

改めて、Kibanaの画面を開きます。

(1) Infrastructure UI

Infrastructure UIでは以下のような画面が見れます。

Map View

Infrastructure - MapView

Metric Explorer

Infrastructure - Metric Explorer

(2) Logs UI

Logs UI では以下のような画面が見れます。

ログ

Logs UI

ログの詳細

Logs UI Detail

まとめ

k8s クラスタでの Node や Pods の監視を、監視対象となるアプリケーションの変更なしに、Kibana で簡単に可視化できることがわかりました。

動的にノードやコンテナがスケールするクラスタでは、こういった可視化をサポートする仕組みが必要不可欠です。

本記事では触れませんが、各 View では、簡単な操作でドリルダウンを行うことができますので、いろいろ触って使い方に慣れておくと良いと思います。

次回は、コンテナ内で動いているミドルウェアの監視について説明したいと思います。

それでは。

参考文献


Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

  少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

「Elasticsearch NEXT STEP」を出版しました!

こんにちは、Elastic Certified Engineerの樋口(@shin0higuchi)です😊

本日、Acroquestの有志で執筆した「Elasticsearch NEXT STEP」が発売されました!
nextpublishing.jp

この本は昨年10月に開催された技術書典5で頒布したものをベースに執筆しました。
そのときに書いたブログはこちら。懐かしいですね。
acro-engineer.hatenablog.com

Elasticsearchのインストールは簡単で手軽に使い始められますが、環境に考慮した設定や、データ分析などへの活用につまづく方を実務で見てきました。
また、入門書レベルを越えた方に向けた情報が少ないと感じていました。
そこで、入門書の次のSTEPに踏み出すための実用的な事例を集めた書籍を執筆しました。

各章の内容を簡単にご紹介します。

第1章 Elasticsearchで実践するはてなブログの記事解析

Kaggle Masterの称号を持つ山本(@tereka114)が、ブログのデータを使った分析について紹介しました。

第2章 日本語検索エンジンとしてのElasticsearch

私と同じElastic Certified Engineerで、言語処理学会でも発表経験がある佐々木(@Ssk1029Takashi)が、実務で直面する日本語全文検索の課題を解決するべくSudachiを使った形態素解析を紹介しました。

第3章 Elasticsearch SQL

樋口(@shin0higuchi)がElasticsearch SQLについて紹介しました。
Elasticsearchは昔から独自形式のクエリが利用できましたが、今ではSQL形式のクエリもサポートしています。
Elasticsearch SQLについて、まとまった解説した文章はまだ少ないため、紹介しました。

第4章 はじめてのElasticsearchクラスタ

分散処理に明るい束野(@snuffkin)がElasticsearchクラスタの基礎と、運用時によく問題となるケース・解決策を紹介しました。


日頃からElasticsearchやデータ分析を業務の中心にしているメンバが集まり、実践的な内容になりました。
入門の次のSTEPを目指す方は、ぜひご購入ください!

また、AcroquestではElasticsearchを使ったソリューションの提供や、Elastic Stack構築サービスを行っています。
ご興味がある方はぜひ、こちらもご覧ください。
www.endosnipe.com
www.endosnipe.com

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。


世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com

mockmockのSORACOM連携機能を試してみた

f:id:acro-engineer:20190701141735p:plain:w550

こんにちは、IoTデータ分析プラットフォーム「Torrentio」開発者のmiuraです。

2019年7月2日にリリースされたばかりのmockmockのSORACOM連携機能について試してみましたのでご紹介します。

■mockmock SORACOM連携機能とは

https://mock-mock.com/ja/

mockmockは、クラウド上に仮想デバイスを作成し、開発中のサーバーに疑似データを届けられるサービスです。

そのmockmockのデータ送信方法に、今回新たにSORACOMとの連携が出来るようになりました。
これにより、実デバイス(実環境)/仮想デバイス(mockmock環境)のどちらでもSORACOMを通じてデータを送信することになるため、ユーザー環境にそれぞれの環境構成を用意する必要がなくなります。

f:id:acro-engineer:20190701135939p:plain:w600

SORACOMのサービスからデータを受け取れるか確認するには実際にデバイスを用意する必要がありました。
私も自社サービスの開発過程で検証する際に、SORACOM SIMを挿した実機を用意して試験を行なっていましたが、試験の度に実機を用意するのが面倒だと思っていました。
しかし、この新機能を使えばmockmockで生成した疑似データを使って確認することが出来ます。

では、さっそくmockmockの新機能を試していきましょう。

1. 試してみる前に

今回はmockmockの新機能SORACOM連携機能とIoTデータ分析プラットフォーム「Torrentio」との連携を行います。

https://www.site.torrentio.tech/torrentio/

Torrentioとは弊社(アクロクエストテクノロジー株式会社)が開発しているサービスです。
SORACOM Beamで利用できるREST-APIhttps)や、SORACOM Funnel Adapterに対応しており、デバイスからのデータを収集・分析することができるサービスです。
今回はデバイスから直接ではなく、mockmockからSORACOM経由でTorrentioにデータを送ることを試してみます。

2. mockmockの環境を作成する

2-1. SORACOMタイプのプロジェクトを作成する

プロジェクト一覧タブからプロジェクト作成ボタンを押して新規作成します。

f:id:acro-engineer:20190628173705j:plain:w500

2-2. グラフバリュージェネレーターを作成する

サイドメニューの「グラフ」の+ボタンから新規作成を行います。
グラフバリュージェネレーター名を「temperature」と登録し、以下の設定を入力して更新します。

f:id:acro-engineer:20190628171613p:plain:w500

2-3. データテンプレートを作成する

サイドメニューの「データテンプレート」の+ボタンから新規作成を行います。
JSON形式で送信データの形を登録すると、パースされてテーブル形式で表示されます。
また、キーごとに編集が出来るので、生成タイプを変更します。

f:id:acro-engineer:20190628171725p:plain:w500

2-4. mockを作成する

まず、サイドメニューの「mockグループ」の+ボタンから新規作成を行います。

f:id:acro-engineer:20190628172509p:plain:w500

次に、新規作成されたmockグループのmockステータスタブに移動し、mockステータスを新規作成します。

f:id:acro-engineer:20190628172529p:plain:w500

最後に、mockグループのmock管理タブに移動し、mock一覧にあるmock作成ボタンを押して新規作成します。
その際、mockごとにidを割り当てられるので、12345など適当な値を入力し、登録してください。

3. SORACOM連携の準備をする

3-1. soracom-cliをインストールする

mockmockで自動で生成されるsoracomデバイスグループに設定を行うためにsoracom-cliを準備します。
soracom-cliのGitHubリポジトリから「soracom_0.4.4_windows_amd64.zip」をダウンロードします。
ダウンロードしたzipファイルを解凍し、「soracom.exe」を適当なフォルダに配置してください。
(必要であれば、PATHを通して実行できるようにしてください)

3-2. soracom cliのprofileを設定する

プロジェクト設定画面にてSORACOM認証キー一覧の新規作成ボタンを押して、SORACOM認証キーID(AuthKeyId)とSORACOM認証キーシークレット(AuthKey)を取得します。

f:id:acro-engineer:20190628180409p:plain:w500

以下のコマンドを実行してAuthKeyIdとAuthKeyを入力し、soracom-cliのprofileを設定します。

$ soracom configure --profile mockmock
--- SORACOM CLI セットアップ ---
/Users/yourname/.soracom ディレクトリがなければ作成し、そこにファイル 'mockmock.json' を作成します。

カバレッジタイプを選択してください。

1. Global
2. Japan

選択してください (1-2) > 2


認証方法を選択してください。

1. AuthKeyId と AuthKey を入力する(推奨)
2. オペレーターのメールアドレスとパスワードを入力する
3. SAM ユーザーの認証情報を入力する(オペレーターID、ユーザー名、パスワード)

選択してください (1-3) > 1
authKeyId: <JSONファイルに書かれたAuthKeyIdを入力する>
authKey: <JSONファイルに書かれたAuthKeyを入力する> ← 入力内容は非表示となります。


以上でSORACOMと連携するための下準備は完了です。
それでは実際にmockmockと今回対応されたSORACOMのサービス「Beam」と「Funnel」との連携、おとびTorrentioへのデータ送信を行っていきます。

4. SORACOM Beamと連携する

4-1. REST APIのエンドポイントを作成する

TorrentioにてデータをREST APIで受け付けられるようにエンドポイントを作成します。
エンドポイント一覧画面の新規作成ボタンを押し、各項目を選択して作成します。
その後、作成したエンドポイントの更新画面に行き、以下の値をメモしておきます。

  • エンドポイント
  • APIキー

f:id:acro-engineer:20190628182310p:plain:w500

4-2. サービスを作成する

Torrentioにてデータを格納する場所である「サービス」を作成します。
サービス一覧画面の新規作成ボタンを押し、サービス名とエンドポイントを選択して作成します。

f:id:acro-engineer:20190628182328j:plain:w500

4-3. soracomデバイスグループにSORACOM Beamを設定する

SORACOM Beamの設定となるbeam.jsonを準備します。

[
  {
    "key": "inventory://beam.soracom.io",
    "value": {
      "enabled": true,
      "name": "Torrentio",
      "addEquipmentHeader": false,
      "addSignature": false,
      "addSubscriberHeader": false,
      "customHeaders": {
        "x-api-key": {
          "action": "append",
          "headerKey": "x-api-key",
          "headerValue": "<APIキー>"
        }
      },
      "skipStatusCode": false,
      "useClientCert": false,
      "useClientCredentials": false,
      "addDeviceIdHeader": false,
      "destination": "<エンドポイント>"
    }
  }
]

mockmockで生成されたsoracomデバイスグループに対して、以下のコマンドを実行します。

$ soracom groups put-config  --group-id <デバイスグループID> --namespace SoracomBeam --body @beam.json --profile mockmock

4-4. テスト送信をしてみる

mockステータス画面にてテスト送信を実行します。
レスポンスコードが200という結果になり、データをTorrentioへ送信することができました。

f:id:acro-engineer:20190628191414j:plain:w500

Torrentioのサービスコンソールにてデータが来ていることも確認できます。

f:id:acro-engineer:20190628190915j:plain:w500

5. Funnelと連携する

5-1. SORACOM Funnel対応のエンドポイントを作成する

SORACOM Funnelと連携できるTorrentioのエンドポイントを作成します。
エンドポイント一覧画面の新規作成ボタンを押し、種類に「SORACOM Funnel」を選択して作成します。
その後、作成したエンドポイントの編集画面に行き、以下の値をメモしておく。

  • テナントID
  • エンドポイントID
  • APIキー

f:id:acro-engineer:20190628183514p:plain:w500

5-2. サービスに紐づくエンドポイントを変更する

「4-2. サービスを作成する」で作成したサービスのエンドポイントを変更します。

f:id:acro-engineer:20190628185457p:plain:w500

5-3. soracomデバイスグループにSORACOM Funnelを設定する

SORACOM Funnelで使用する認証情報をSORACOMに登録するためにcredential.jsonを準備します。

{
  "type": "api-token-credentials",
  "description": "for_mockmock",
  "credentials": {
    "token": "<APIキー>"
  }
}

mockmockのプロジェクト設定のSORACOM 認証情報ストアにてSORACOM 認証情報IDを新規作成する。

f:id:acro-engineer:20190628184513p:plain:w500

以下のコマンドを実行して認証情報を登録します。

$ soracom credentials update --credentials-id <SORACOM 認証情報ID> --body @credential.json --profile mockmock

SORACOM Funnelの設定となるfunnel.jsonを準備します。

[
    {
      "key": "contentType",
      "value": "json"
    },
    {
      "key": "credentialsId",
      "value": "<SORACOM 認証情報ID>"
    },
    {
      "key": "destination",
      "value": {
        "provider": "acroquest",
        "resourceUrl": "torrentio",
        "service": "torrentio",
        "tenantId": "<テナントID>",
        "endpointId": "<エンドポイントID>"
      }
    },
    {
      "key": "enabled",
      "value": true
    }
  ]

mockmockで生成されたsoracomデバイスグループに対して、以下のコマンドを実行する。

$ soracom groups put-config  --group-id <デバイスグループID> --namespace SoracomFunnel --body @funnel.json --profile mockmock

5-4. テスト送信をしてみる

mockステータス画面にてテスト送信を実行します。
SORACOM Funnelを経由してのTorrentioへのデータ送信が出来ることが確認できました。

f:id:acro-engineer:20190628192307p:plain:w500

5-5. mock起動

mock管理画面のmock一覧にある作成したmockの操作メニューから起動を選択します。
mockmockで生成されたデータが定期的にTorrentioに蓄積されていきました!

f:id:acro-engineer:20190628193324p:plain:w500

まとめ

SORACOMのサービスと連携させた際に、実際のデバイスを用意してデータを送信する必要がありました。
しかし今回のmockmockのSORACOM連携により、実際のデバイスがなくともSORACOMのサービスを介したデータ送信を試すことが出来るようになります。
また、実際のデバイスを使う際には切り替えるだけでデータを送信することが出来るので、適用が楽になります。
SORACOMのサービスとの連携がぐんとやりやすくなった新機能でした。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
モノリシックなアプリケーションをマイクロサービス化したいエンジニア募集! - Acroquest Technology株式会社のWeb エンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

雑誌「Interface」で量子コンピュータの連載を始めました

こんにちは~。
ツカノ@snuffkinです。

6/25(火)に発売されたCQ出版社さんの雑誌「Interface」2019年8月号から、量子コンピュータ入門の連載を始めました!
連載のタイトルは「動かしながら始める量子コンピュータです。
f:id:acro-engineer:20190625071903j:plain:w200

連載を始めた背景

量子コンピュータについて興味を持ち、本や雑誌記事を読んだ方もいらっしゃると思います。
ただ、次のような感想を持つ方もいるように思います。

  • ビジネス書だと量子コンピュータの雰囲気は書いてあるが、理解した気になれない。
  • 専門書を手に取ってみたけれど、数式が難しくて理解できない。

この連載では「普通のプログラマ」の方に向けて、手計算やPythonで動作を確認しながら理解する内容にしました。

内容は次のサイトからちらっと確認できます。
interface.cqpub.co.jp

連載を読んで量子コンピュータにもっと興味が出てきた方には、次の本もおススメです😁
「高校数学からはじめる量子コンピュータ
snuffkin.booth.pm

それではみなさん、量子コンピュータを楽しんでいきましょう!
(Twitter等で感想のフィードバックもあると嬉しいです)

P.S. AI猫カメラも面白い

同僚が「Interface」に連載している「育てるラズパイAI 物体認識カメラ」も面白いです。
猫好きの方は、次のTwitterアカウントをフォローすると癒されるかと思います。
twitter.com

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com