Dapr CLI をインストールする手順

# Dapr CLI をインストールする手順

## 目的

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

## 実現すること

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

## 開発環境

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

<details>

WSL (Microsoft Store アプリ版)

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

Ubuntu

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

Docker Desktop

```sh
Version 4.16.3 (96739)
```

```sh
$ docker --version
Docker version 20.10.22, build 3a2c30b
```

</details>

※ この記事では基本的に Ubuntu のターミナルで操作を行います。

## インストール

インストール

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

バーション確認  
※ ランタイムはまだ初期化されていません。  

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

## ランタイムの初期化  

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

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



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

初期化

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

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

```sh
$ dapr uninstall
```

### Docker 環境に初期化

※ Docker 環境が起動している必要があります。  

```sh
$ docker --version
Docker version 20.10.22, build 3a2c30b
```

初期化

```
$ dapr init
```

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

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

コンテナ起動状況確認

```sh
$ docker ps | grep dapr
a842a0006f5d   redis:6              "docker-entrypoint.s…"   0.0.0.0:6379->6379/tcp             dapr_redis
4201cb6b0ca7   openzipkin/zipkin    "start-zipkin"            9410/tcp, 0.0.0.0:9411->9411/tcp   dapr_zipkin
dae8b337dabe   daprio/dapr:1.10.0   "./placement"             0.0.0.0:50005->50005/tcp           dapr_placement
```

### 初期化後

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

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

バーション確認

```sh
$ dapr --version
CLI version: 1.10.0
Runtime version: 1.10.0
```

## Dapr API を使用してみる

※ ローカル環境に初期化した構成では Redis を起動します。  
※ この例では Redis を Docker コンテナとして起動しています。  

```sh
$ docker run -d -p 6379:6379 redis
```

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

Dapr サイドカーを実行します。  
※ 空のアプリケーションをポート 3500 でリッスンする Dapr サイドカーが起動されます。  

```sh
$ dapr run --app-id hello-dapr --dapr-http-port 3500
```

※ 停止したい場合(別ターミナル)  

+ なおエラーで起動出来ていない場合は停止できないようです。

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

Dapr Dashboard で確認(別ターミナル)

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

### 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 -X GET http://localhost:3500/v1.0/state/statestore/name
"Michael Jackson"
```

Dapr の Redis コンテナを調べて状態を確認します。  
※ Redis CLI を使用します。  
※ ローカル環境に初期化した構成の場合、動作してる Redis コンテナに対して操作して下さい。  

```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"
```

※ Dapr の Redis コンテナに値が保存されています。

Dapr API で値を削除します。

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

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

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

## まとめ

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

## 公式リファレンス

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