谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

Dapr Advent Calendar 1日目 - Dapr CLIのインストール

こんにちは、Dapr Advent Calendar を作りました @cero_t です。このエントリーは Dapr Advent Calendar の1日目です。

Dapr Advent Calendarはじめました

Dapr (https://dapr.io/) とは、Microsoftが中心になって開発しているOSSの分散アプリケーションランタイム、Distributed Application Runtimeの略でDaprです。

様々なクラウドサービスやミドルウェアを良い感じに透過的に扱うことのできるプロダクトで、なかなか筋が良いのですが、何に使えるかよく分からないというか、そもそもどういうものか分かりづらい、発音の仕方すら分からないということもあって注目度はあまり高くなく、日本語の情報も多くありません。

ただ、このDaprはちょうど僕の感じていた課題を解決してくれそうなプロダクトだったので、わりと調べたり触ったりしていて、最近は仕事でも使い始めたところです。そんな時にちょうどAdvent Calendarの季節になりましたので、一人Advent Calendarになることを覚悟の上でカレンダーを立ててみました。

それでは12月25日まで、お付き合いいただければ、いや、きちんと25日まで継続できることを祈ってくだされば、ありがたいです!

あ、ちなみにDaprの発音ですが、英語読みすれば「だぱー」が近いと思いますが、このスペルだと日本語では「だっぱー」になるのが自然です。topを「とぷ」ではなく「とっぷ」と発音するのと同じです。とは言え英語の日本語読みなんてどうでも良いことですので、好きなように発音してもらえば良いと思います。

はじめに

このAdvent Calendarで僕が書くエントリーは、大きく分けて次の三部で構成する予定です。

  1. 基本編 - 各機能を使ってみる
  2. 分散環境編 - k8s上で各機能を使ってみる
  3. 実践編 - 実際に仕事で使ってみた感想や知見をまとめる

基本的な使い方くらい知ってらぁ! という方は12月の半ばあたりから読み始めてもらえれば良いかなと思います。

また、僕が書く記事は「macOS + Java + Spring Boot + Dapr」という構成を前提とします。DaprはOSや言語を問わず使えるサービスですので、他のOSや言語、フレームワークで読み替えてもらえれば良いと思います。

Daprの特徴

「それではDaprの使い方を見ていきましょう」

、、、と書き始めても誰もこの先を読み進めないと思うので、Daprの特徴とメリットを先に簡単に書いておきますね。長々と書いても仕方ないので、ここでは簡単に済ませます。

  1. サイドカーサービスとして動作する
    • Daprは、アプリケーションのプロセスとは別のプロセスとして起動するもので、アプリケーションとHTTP/gRPCプロトコルで通信することで機能を提供する
    • つまり、HTTPかgRPC通信さえできれば、どのような言語やフレームワークでも利用できる
  2. 様々なビルディングブロックを提供する
    • データストアや、pubsub(エンキュー、デキュー)、分散トレーシングなどの機能を提供する
    • サービスディスカバリーやルーティングに相当する機能も提供する
  3. 様々なクラウドサービスやミドルウェアを抽象化したAPIを提供する
    • たとえばメッセージングミドルウェアであれば、RabbitMQやKafka、Amazon SNS/SQSなどを独自APISDKに依存することなく同じAPIで利用できる
    • つまり、アプリケーション開発者はどのようなインフラの上で動作させるかを強く意識する必要がない
  4. ローカル環境でもk8s上でも運用できる
    • ローカル環境ではk8sやDockerイメージなどを作成することなく、分散アプリケーション開発ができる
    • 検証環境や本番環境などでk8s上で動作させる際には、ソースコードを変えることなく設定ファイルを書くだけで対応できる
    • さらにいえば、ローカル環境で開発する際にはDaprそのものを使わずに開発することもできる
  5. キューからデキューして行う非同期メッセージング処理を、通常のWeb APIとして実装できる
    • アプリケーション開発者はあくまでも「Web API」の開発にのみ注力できる
    • 開発時にキューを立てなくても良い

私見なので少し偏りがある気はしますが、総じて、開発と運用の境界にあるような部分を切り離すことで開発をシンプルにできるようになる、というところにメリットを感じています。

Dapr CLIのインストール

それではDaprの使い方を見ていきましょう。

Daprの利用にはDapr CLIが不可欠です。アプリケーションを起動する際にDaprをサイドカーとして起動したり、Dapr経由でアプリケーションを呼び出したり、起動中のアプリケーションの一覧を見たりするために利用します。

Daprを利用するためにはDockerが必要なため、まずはDockerをインストールしておきましょう

https://docs.docker.com/get-docker/

Dockerをインストールしたら、次はDapr CLIのインストールです。インストール方法はOSごとに異なるため、詳しくはドキュメントを参照してください。

https://docs.dapr.io/getting-started/install-dapr-cli/

たとえば、macOSでは次のコマンドでインストールできます。

curl -fsSL https://raw.githubusercontent.com/dapr/cli/master/install/install.sh | /bin/bash

Dapr CLIを触ってみる

Dapr CLIのコマンドを簡単に触ってみましょう。まずはバージョンの確認です。

dapr --version

出力結果はこうなります。

CLI version: 1.4.0 
Runtime version: n/a

まだ環境の初期化が済んでいないため、Runtime versionはn/aとなっています。

Daprを動作させるため、初期化を行いましょう。

dapr init

このコマンドで、ローカル環境に設定ファイルなどが作成され、またDaprの動作に必要なDockerコンテナが作成されます。

初期化が完了したら、もう一度バージョンを確認しましょう。

dapr --version

先ほどと出力結果が変わっているはずです。

CLI version: 1.4.0 
Runtime version: 1.5.0

また、Dockerのコンテナ一覧も確認してみましょう。

docker ps

dapr_placement、dapr_zipkin、dapr_redisの3つのコンテナが起動しているはずです。

CONTAINER ID   IMAGE               COMMAND                  CREATED              STATUS                        PORTS                              NAMES
f7dc118a4bbc   daprio/dapr:1.5.0   "./placement"            About a minute ago   Up About a minute             0.0.0.0:50005->50005/tcp           dapr_placement
46555ffc1d22   openzipkin/zipkin   "start-zipkin"           About a minute ago   Up About a minute (healthy)   9410/tcp, 0.0.0.0:9411->9411/tcp   dapr_zipkin
c55c6700a22c   redis               "docker-entrypoint.s…"   About a minute ago   Up About a minute             0.0.0.0:6379->6379/tcp             dapr_redis

この辺りの使い方は、後のエントリーでおいおい説明していきます。

最後にdapr関連のファイルができていることも確認しましょう。

ls ~/.dapr   

設定ファイルや実行ファイルがいくつか追加されています。

bin      components  config.yaml

ちなみにアンインストールしたい場合には、dapr unistall コマンドを利用します。

dapr uninstall --all

--all オプションを指定しなければ、~/.dapr フォルダや、zipkinとredisのDockerイメージも残ってしまいますが、--all をつけることですべて削除されます。

まとめ

今回はここまでです。今回の内容を簡単に振り返りましょう。

  • Daprはサイドカーサービスとして動作し、様々なクラウドサービスやミドルウェアを共通のAPIで利用できるようになります
  • DaprとアプリケーションはHTTP/gRPCで通信するため、開発者は好きな言語やフレームワークを利用してアプリケーション開発ができます
  • まずはDockerとDapr CLIをインストールしましょう

まだCLIをインストールしただけの小さな一歩ですが、ここから続くAdvent Calendarを読むために欠かせない作業です。

それでは、これからも引き続きDapr Advent Calendarをよろしくお願いします。継続することを祈っていてください!!(!?)