Dapr CLI を Ubuntu にインストールする

# Dapr CLI を Ubuntu にインストールする

こんにちは、@studio_meowtoon です。今回は、WSL Ubuntu 22.04 に　Dapr CLI とランタイムをインストールする方法を紹介します。
![dapr_on_ubuntu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/de387964-cc90-234b-c35c-155808e5e525.png)

## 目的

分散アプリケーションの為のランタイム [Dapr](https://docs.dapr.io/concepts/overview/) の理解を深めます。  

## 実現すること

ローカル環境 (Ubuntu) に Dapr を操作する為のコマンドラインツール [Dapr CLI](https://docs.dapr.io/getting-started/install-dapr-cli/) をインストールして Dapr ランタイムの動作を確認します。  

## 技術トピック

### Dapr とは？  

<details>
<summary>こちらを展開してご覧いただけます。</summary>

### [Dapr (ダーパー)](https://docs.dapr.io/)

Dapr（Distributed Application Runtime）は、マイクロサービスアプリケーションをより簡単に構築するためのオープンソースのランタイムです。

|キーワード|内容|
|:--|:--|
|ポータビリティ|Dapr はプログラム言語やクラウドプロバイダに依存しない、ユニバーサルなランタイムです。|
|プラグ＆プレイ|既存のアプリケーションに Dapr を追加する際、既存のコードを変更することなくシームレスに統合できます。|
|サービス間通信|Dapr はメッセージングとイベント駆動のパターンをサポートし、サービス間の連携を簡単に実現します。|
|シークレット管理|アプリケーションの構成情報や認証情報などのシークレットを安全に管理できます。|
|開発の迅速化|Dapr のプラグ＆プレイ機能により、コードの再利用が容易になり、アプリケーションの開発時間が短縮されます。|
|フレキシブルなアーキテクチャ|Dapr はアプリケーションのコンポーネント間の緩やかな結合を促進し、アーキテクチャの柔軟性を高めます。|
|拡張性|Dapr は多くの言語とクラウドプロバイダに対応しており、拡張機能を追加することでカスタマイズが可能です。|
|可用性と信頼性|Dapr は分散システムにおける共通の問題に対処し、アプリケーションの可用性と信頼性を向上させます。|

</details>

## 開発環境

+ Windows 11 Home 22H2 を使用しています。  
+ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方も参考にして頂けます。  

<details>

WSL (Microsoft Store アプリ版) [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
```

Ubuntu [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/2aaa6579cb8e4fa1d874)

```sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
```

Docker [※ こちらの関連記事からインストール方法をご確認いただけます](https://qiita.com/studio_meowtoon/items/3bceee25ac67cc73ebbe)

```sh
$ docker --version
Docker version 23.0.1, build a5ee5b1
```

</details>

## Dapr CLI インストール

インストールします。

```sh
$ wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
```

バーションを確認します。  

```sh
$ dapr --version
CLI version: 1.11.0
Runtime version: n/a
```

:::note warn
ここまでの手順では、Dapr ランタイムはまだ初期化されていません。  
:::

## Dapr ランタイムの初期化  

:::note info
Dapr ランタイムを初期化する方法が2種類あります。 
:::

|No|方法|概要|
|:--|:--|:--|
|1|ローカル環境に初期化|Dapr の起動には Redis が必要なので Redis の環境を個別に用意する必要があります。|
|2|Docker 環境に初期化|Dapr の起動に必要である Redis コンテナもセットで環境が初期化されます。<br/> ※ 公式での推奨|


### ローカル環境に初期化

:::note warn
この記事ではこちらの方法は試みません。

初期化

```
$ dapr init --slim
```

※ Dapr ランタイムをアンインストールする場合

```sh
$ dapr uninstall
```
:::

### Docker 環境に初期化

:::note info
この記事ではこちらの方法を実施します。
:::

Docker 環境の起動を確認します。

```sh
$ docker --version
Docker version 24.0.4, build 3713ee1
```

初期化します。

```
$ dapr init
```
出力
```sh
⌛  Making the jump to hyperspace...
ℹ️  Container images will be pulled from Docker Hub
ℹ️  Installing runtime version 1.11.2
→  Downloading binaries and setting up components...
Dapr runtime installed to /home/hiroxpepe/.dapr/bin, you may run the following to add it to your path if you want to run daprd directly:
    export PATH=$PATH:/home/$USER/.dapr/bin
✅  Downloading binaries and setting up components...
✅  Downloaded binaries and completed components set up.
ℹ️  daprd binary has been installed to /home/$USER/.dapr/bin.
ℹ️  dapr_placement container is running.
ℹ️  dapr_redis container is running.
ℹ️  dapr_zipkin container is running.
ℹ️  Use `docker ps` to check running containers.
✅  Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started
```

:::note warn
Dapr ランタイムをアンインストールする場合には以下のコマンドを実行します。

```sh
$ dapr uninstall --all
```
:::

コンテナの起動状況を確認します。

```sh
$ docker ps | grep dapr
35cd134c3331   openzipkin/zipkin    "start-zipkin"            4 minutes ago   Up 4 minutes (healthy)   9410/tcp, 0.0.0.0:9411->9411/tcp, :::9411->9411/tcp   dapr_zipkin
95b45d0675e7   daprio/dapr:1.11.2   "./placement"             4 minutes ago   Up 4 minutes             0.0.0.0:50005->50005/tcp, :::50005->50005/tcp         dapr_placement
0bd11951aa9d   redis:6              "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes             0.0.0.0:6379->6379/tcp, :::6379->6379/tcp             dapr_redis
```

### 初期化後

:::note info
以下のディレクトリに Dapr ランタイムがインストールされています。
:::

```sh
 /home/$USER/.dapr/bin  
```

再度バーションを確認します。

```sh
$ dapr --version
CLI version: 1.11.0
Runtime version: 1.11.2
```

:::note info
ここまでの手順で、Ubuntu に Dapr ランタイムをインストールすることができました。
:::

## Dapr API を使用してみる

### Dapr ランタイムの起動

Dapr サイドカーを実行します。 

:::note info 
この例では、空のアプリケーションを**ポート 3500 でリッスン**する **Dapr サイドカー**が起動されます。  
:::

```sh
$ dapr run --app-id hello-dapr --dapr-http-port 3500
```
出力の一部
```sh
ℹ️  Checking if Dapr sidecar is listening on GRPC port 45501
ℹ️  Dapr sidecar is up and running.
✅  You're up and running! Dapr logs will appear here.
```

:::note warn
停止したい場合、別ターミナルで以下のコマンドを実行します。なお、エラーで起動出来ていない場合は停止できないようです。

```sh
$ dapr stop --app-id hello-dapr
```
:::

別ターミナルから、Dapr Dashboard で確認します。

```sh
$ dapr dashboard -p 9999
Dapr Dashboard running on http://localhost:9999
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/669024c2-1bc0-f289-9a85-c5a8f88cba1f.png)

### API で操作してみる

別ターミナルから Dapr API で値を登録します。

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

続けて Dapr API で値を取得してみます。

```sh
$ curl http://localhost:3500/v1.0/state/statestore/name
```
出力
```
"Michael Jackson"
```

Dapr の Redis コンテナを調べて状態を確認します。

:::note warn
Redis CLI を使用します。
:::

```sh
$ docker exec -it dapr_redis redis-cli
```

Redis CLI  
※ exit で操作を抜けます。

```sh
> keys *
1) "hello-dapr||name"
```

```sh
> hgetall "hello-dapr||name"
1) "data"
2) "\"Michael Jackson\""
3) "version"
4) "1"
```

:::note info
このように、Dapr API で操作した値が、Redis コンテナに保存されています。
:::

Dapr API で値を削除します。

```sh
$ curl -v -X DELETE -H "Content-Type: application/json" http://localhost:3500/v1.0/state/statestore/name
```

:::note info
Redis コンテナを確認すると値が削除されています。
:::

```sh
> keys *
(empty array)
```

## まとめ

+ Dapr CLI をインストールして Dapr ランタイムを構築し、 Ubuntu の Docker 環境にて Dapr API の動作を確認することが出来ました。

どうでしたか？ WSL Ubuntu に Dapr CLI をインストールして Dapr ランタイムを構築できます。ぜひお試しください。今後も Ubuntu の開発環境などを紹介していきますので、ぜひお楽しみにしてください。

## 推奨コンテンツ

https://qiita.com/studio_meowtoon/items/2141cfd290b526a3bd39

## 参考資料

[Dapar Getting started](https://docs.dapr.io/getting-started/)