3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ローカルマシンでいち早くDaprを動作させる手順

Last updated at Posted at 2021-07-04

はじめに

本記事は、企画「QiitaAzure記事投稿キャンペーン」の2021年6月のテーマ「Microsoft Buildで発表された技術情報に関する記事を投稿しよう!」への参加記事です。

参加条件には、2021年5月26日〜28日に開催された「Microsoft Build 2021」で発表されたテクノロジーに関する内容であることが求められています。

現在、個人的に「Dapr」にハマりかけており、関連するセッション動画があれば参加できるのになぁと思いながら検索したところ...まさに奇跡!? 何と1件だけヒットしました!

これにより、参加条件を満たすることができたと思い、今回投稿してみました。

Daprとは?

Daprは、分散アプリケーションランタイムです。

分散アプリケーションにおける、各サービスの紐付け、状態やシークレットの管理、Pub/Sub、観測などをブロックやコンポーネントとして扱うことで、自由に組み合わせて機能を構築できます。

また、インフラ側は様々なクラウドやエッジに、アプリケーション側は様々なプログラミング言語に対応しているため、こちらも自由に組み合わせて開発できます。

Gopherとしては、Go製オープンソースソフトウェアである点が、マルチクラウドファンとしては、各社のパブリッククラウドサービスをマッシュアップできる点が、大きな魅力となっています。

詳細につきましては、次のドキュメントを参照してみてください。(現在、私も読み進めている最中!)

準備手順

基本的には、Dapr公式ドキュメント「Getting started with Dapr」の1.〜3.に従って進めて行きます。

  1. Install the Dapr CLI
  2. Initialize Dapr
  3. Use the Dapr API

前提条件

今回の対象OSはmacOSです。

Dapr CLIのインストール

Dapr公式ドキュメント「Install the Dapr CLI」にて、「MacOS」タブ内では、curlbrewのコマンドでインストールする手順が紹介されています。

私は自分の責任で配置したいため、ここでは「Binaries」タブ内で紹介されている「Dapr Release」にアクセスして、macOS版である「dapr_darwin_amd64.tar.gz」を選択&ダウンロードして、tarコマンドで展開しました。

tar zxvf dapr_darwin_amd64.tar.gz

daprコマンドが展開されるので、実行して動作確認します。

./dapr -v
CLI version: 1.2.0 
Runtime version: 1.2.2

ローカル環境でのDaprの初期化

Dapr公式ドキュメント「Initialize Dapr in your local environment」には、Dockerの使用を前提とした初期化の手順が紹介されています。

私はDockerなしで動作させたいため、ここではDapr公式ドキュメント「How-To: Run Dapr in self-hosted mode without Docker」に従って、Dockerなしの方法で初期化します。

Daprを最小単位で初期化します。

dapr init --slim

この時、ホームディレクトリー配下に.dapr/ディレクトリーが作成されます。

$HOME/.dapr/
|
+--bin/
|  |
|  +--daprd
|  +--dashboard
|  +--placement
|  +--web/
|
+--components/
+--config.yaml

Redis

Redisは、オープンソースのメモリ内データ構造ストアです。

Dapr公式ドキュメントでは、状態を保存するために「Redis」を使う内容になっているため、Redisをダウンロード&セットアップします。

Redis公式ドキュメント「Redis Quick Start」を読み進めると、Redisのダウンロードにはwgetコマンドを使うようになっていますが、私のmacOSにはwgetコマンドは入っていないので、Webブラウザーにてダウンロードします。

Redis公式ドキュメントで紹介されていた「download.redis.io/redis-stable.tar.gz」リンクをクリックしてもダウンロードできなかったため、Redis公式サイトの「Download」に遷移して、Stable版の「Download X.Y.Z」をクリックしてダウンロードしました。

ダウンロード後、Redis公式ドキュメントの手順に従って展開&コンパイルします。

tar xvzf redis-X.Y.Z.tar.gz
cd redis-X.Y.Z
make

Redisサーバーを起動します。

./src/redis-server

別ターミナルを立ち上げて、Redis CLIを実行して動作を確認します。

./src/redis-cli ping
PONG

Dapr公式ドキュメント「Initialize Dapr in your local environment」に戻ると、観測には「Zipkin」を、アクターには「Dapr placement」を使うように記載されています。

Zipkinは、オープンソースの分散トレースシステムです。

Java 8以上で動作するのですが、私のmacOSにはJava 8が入っていないため、Javaのインストール手順から書き始めなければならず、そうすると最小限ではなくなってしまうため、今回は対象外とします。後日、記事を書いた際にはリンクを貼っておきます。

Dapr placementは、Dapr公式ドキュメントの通り、次のコマンドで起動できます。

$HOME/.dapr/bin/placement

DaprとRedisの紐付け

Daprでは、状態を管理する機能はビルディングブロック「ステートストア」です。

Daprと各サービスの紐付けは、yamlファイルに設定値を記述することで行います。

今回の場合、$HOME/.dapr/components/ディレクトリー配下に「statestore.yaml」ファイルを作成します。ファイル名は任意で大丈夫です。

作成したYAMLファイルの内容は、以下のリンク先で紹介されていますので、コピー&ペーストしてください。

  • Dapr の状態管理構成ブロック | Microsoft Docs - 構成
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: localhost:6379
  - name: redisPassword
    value: ""
  - name: actorStateStore
    value: "true"

RedisのYAMLファイルの詳細については、以下を参照してください。

Dapr APIを使う

Dapr公式ドキュメント「Use the Dapr API」の内容に従って、ステートの保存と読み出しを試みます。

Daprでは、アプリケーションと通信するためのHTTP/gRPCインターフェースとそれに紐付くビルディングブロックを合わせたものを「サイドカー」と呼びます。

dapr runコマンドで、アプリケーションとサイドカーを起動します。

Dapr公式ドキュメントの例では、アプリケーションがない状態で、アプリケーションIDを「myapp」として、サイドカーのポート番号を「3500」にして、Daprを起動しています。

./dapr run --app-id myapp --dapr-http-port 3500

Daprのステートストアで管理できるデータはキーバリューです。

Dapr公式ドキュメントの例では、データをJSONで表しています。

[
  {
    "key": "name",
    "value": "Bruce Wayne"
  }
]

curlコマンドにて、URLにステータスストアのエンドポイントv1.0/stateとメタデータ名statestoreを指定して、HTTP通信のPOSTメソッドでJSONデータを送信して保存します。

curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Bruce Wayne"}]' http://localhost:3500/v1.0/state/statestore

curlコマンドにて、URLにステータスストアのエンドポイントv1.0/stateとメタデータ名statestoreと保存したデータのキー項目値nameを指定して、HTTP通信にてメタデータ名statestoreに保存したデータのキー項目値nameのバリュー値を取得します。

curl http://localhost:3500/v1.0/state/statestore/name
"Bruce Wayne"

Redis CLIを対話モードで起動して、保存されたデータを確認します。

./src/redis-cli
127.0.0.1:6379> keys *
1) "myapp||name"
127.0.0.1:6379> hgetall "myapp||name"
1) "data"
2) "\"Bruce Wayne\""
3) "version"
4) "1"
127.0.0.1:6379> exit

各サーバーの停止

daprコマンドにて、アプリケーションIDを指定してDaprを停止します。

./dapr stop --app-id myapp

Redis CLIでRedisサーバーを停止します。

./src/redis-cli shutdown

さいごに

企画の締め切りもあり、まずはローカルマシンでいち早くDaprの鼓動を実感するところまでを紹介させて頂きました。

Dockerが使える方は、Dapr公式ドキュメントに従って是非dapr initコマンドでの使い方を進めてみてください。

DaprとDapr CLIのインストールはGoのソースコードからビルドしたいところ!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?