はじめに

前回はAzure Kubernetes Service(AKS)を使ってKubernetesクラスター上でコンテナ化アプリケーションを実行する方法について説明しました。今回はマイクロサービスアーキテクチャのアプリケーション構築を支援する「Dapr」を使ってAKS上にアプリケーションを構築していく方法について説明していきます。

Azure Kubernates Serviceでマイクロサービスアプリケーションを動かそう

AKS上にマイクロサービスアーキテクチャのアプリケーションを構築する方法には様々なものがあります。今回はDaprというツールを使ったマイクロサービスの開発と運用方法について説明します。

マイクロサービスアーキテクチャとは

まずはマイクロサービスアーキテクチャについて説明します。マイクロサービスアーキテクチャとは複数の小規模なサービス(アプリケーション)を組み合わせて一つのアプリケーションを構築していくソフトウェアの開発手法です。これまでは一つの大きなアプリケーションを構築する手法(モノリシック(一枚岩)アーキテクチャ)が一般的でしたが、コンテナ技術の発展によりアプリケーションをサービス単位で分割して開発・実行することが容易になったことからマイクロサービスアーキテクチャが注目されるようになりました。
マイクロサービスアーキテクチャはサービス単位での開発が可能のため、各サービスは個別に言語やフレームワークを選択して開発を行い、個別にデプロイできます。
Kubernetesを使用する場合、各マイクロサービスはそれぞれが独立したコンテナーとしてクラスター上にデプロイされ、お互いに連携を取って一つのアプリケーションとしての機能を提供していきます。

Daprとは

Daprという名称は「Distributed Application Runtime(分散アプリケーションランタイム)」を略したものです。分散アプリケーションとはマイクロサービスを指しており、マイクロサービスアプリケーションの開発や実行を簡略化・サポートするAPI群を提供する実行基盤(ランタイム)という位置づけとなっています。Kubernetes上では各マイクロサービスアプリケーションはポッド単位で分割されますが、Daprは各マイクロサービス用のポッド内にデプロイされます。このようにアプリケーションのコンテナに隣接してデプロイされるコンテナは、サイドカーコンテナと呼ばれます。サイドカーコンテナは各マイクロサービスのポッドが連携する際の仲介役として機能します。
AKSでは、クラスター拡張機能と呼ばれる機能でKubernetesクラスター内にDaprを容易に追加することができるようになっています。

Daprを使ったマイクロサービスアプリケーションをAKS上に構築しよう

ここからは実際にDaprを使ったマイクロサービスアプリケーションをAKS上に構築していきます。今回はHTTPリクエストでJSON形式のメッセージを受け取り、それをRedisに保存するアプリケーションをDaprを使って開発していきます。

AKSにDaprを導入する

まずはAKSでDaprが利用できるようにするために、AKSのクラスター拡張機能を利用してDaprをKubernetesクラスターに追加していきます。なおAKSのクラスターを未作成の場合は、前回の内容を参考にクラスターの作成を行って下さい。

Azure CLIからAKSにDapr拡張機能を追加する

az k8s-extension create --cluster-type managedClusters \
--resource-group zerokara \
--cluster-name zerokara-dapr \
--name myDaprExtension \
--extension-type Microsoft.Dapr

「az k8s-extension create」コマンドでAKSに拡張機能を追加できます。「extension-type」オプションで「Microsoft.Dapr」を指定することでDaprが追加されます。「cluster-type」は「managedClusters」固定で、「resource-group」、「cluster-name」にはそれぞれAKSクラスターの所属するリソースグループ名とクラスター名を入力します。「name」には作成する拡張機能の名称を設定します。
コマンドを実行してしばらく待つと拡張機能の追加が完了し、Daprを利用できるようになります。

Redisの構築

次にアプリケーションのデータを保存するRedisを用意します。今回はAzureのマネージドサービスであるAzure Cache for Redisを使ってRedisインスタンスを作成します。AzureポータルからAzure Cache for Redisのサービスを選択し、「作成」ボタンからインスタンスを新規作成していきます。

  • Azure Cache for RedisでRedisインスタンスを作成する

サブスクリプションとリソースグループは任意のものを選択します。DNS名と場所には任意の名称と場所を入力します。キャッシュの種類でRedisキャッシュのスペックを決定します。今回は開発用途のため最小構成である「Basic C0」のプランを選択します。基本情報の入力が完了したら「レビューと作成」ボタンを選択し、「作成」ボタンを選択してRedisインスタンスの作成を開始します。しばらく待つとインスタンスの作成が完了します。
Redisインスタンスの作成が完了したら以下のコマンドをAzure CLIから実行します。

RedisインスタンスのアクセスキーをKubernatesシークレットとして保存する

$ az aks get-credentials --resource-group zerokara --name zerokara-dapr

$ kubectl create secret generic redis --from-literal=redis-password=<Redisのプライ    マリアクセスキー>

まず「az aks get-credentials」コマンドでAzure CLIが接続するAKSのクラスターを指定し、Kubernatesのインスタンスを操作するためのkubectlコマンドが利用できるようにします。次に「kubectl create secret」コマンドでパスワードなどの機密情報を保持するKubernatesの「シークレット」という種類のリソースを作成していきます。先程作成したRedisインスタンスをAzureポータルで表示し、「アクセスキー」のメニューにある「プライマリ」に表示されているアクセスキーをコピーしてコマンドに入力して実行します。

シークレットが作成できたら、RedisインスタンスにアクセスするためのDaprコンポーネントである状態ストアをAKS上に作成していきます。状態ストアはKubernetesのマニュフェストファイルの形式で定義していきます。deployフォルダを作成して「redis.yaml」ファイルを記述します。

Redisインスタンスにアクセスするための状態ストアのマニュフェスト(deploy/redis.yaml)

apiVersion: dapr.io/v1alpha1 # DaprのAPIリソースを使用する・・・①
kind: Component
metadata:
  name: redisstore
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: zerokara-dapr.redis.cache.windows.net:6380 # Azure Cache for Redisのホスト名を設定・・・②
  - name: redisPassword
    secretKeyRef: # Redisのパスワードを保持するシークレット名とキー名を設定・・・③
      name: redis
      key: redis-password
  - name: enableTLS
    value: true
auth:
  secretStore: kubernetes

状態ストアはDaprが提供するComponentというリソースで実装されているため、先頭の「apiVersion」はDaprのAPIグループを指定します(①)。「metadata.name」はリソースを識別できる任意の名称を入力します。ここでは「redisstore」という名称にします。「spec.type」ではDaprのComponentの種類を指定します。Redisを使った状態ストアの場合は「state.redis」と指定します。「redisHost」というメタデータにはRedisのホスト名を指定します(②)。Azure Cache for Redisの場合、「.redis.cache.windows.net:6380」とホスト名を設定します。「redisPassword」メタデータではRedisのパスワードを設定します。「secretKeyRef」というフィールドを使用すると、Kubernetesのシークレットに保存したRedisパスワードを参照できるようになります(③)。ここには先程「kubectl create secret」で作成した際に指定したシークレットの名前とキーを設定します。
マニュフェストファイルを作成したら、AKSにマニュフェストを適用します。

Redis用状態ストアのマニュフェストをAKSに適用する

$ kubectl apply -f ./deploy/redis.yaml

「component.dapr.io/redisstore created」といったメッセージが表示されれば、状態ストアの作成は成功です。

AKSにデプロイするアプリケーションの作成

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら