Azure Container Apps の Dapr コンポーネント
Dapr では、機能がコンポーネントとして提供されるモジュール設計を使用します。 Dapr コンポーネントの使用はオプションであり、アプリケーションのニーズによって排他的に決まります。
コンテナー アプリの Dapr コンポーネントは、次のようなことを行う環境レベルのリソースです。
- サポート対象の外部サービスに接続するためのプラグ可能な抽象化モデルを提供できる。
- コンテナー アプリ間で共有することも、特定のコンテナー アプリにスコープを設定することもできる。
- Dapr シークレットを使用して、構成メタデータを安全に取得できる。
このガイドでは、Azure Container Apps サービス向けに Dapr コンポーネントを構成する方法について説明します。
コンポーネントのスキーマ
Dapr オープンソース プロジェクトでは、すべてのコンポーネントは次の基本的なスキーマに準拠しています。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: [COMPONENT-NAME]
namespace: [COMPONENT-NAMESPACE]
spec:
type: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
Azure Container Apps では、Dapr コンポーネントに対応し、不要なフィールド (apiVersion
、kind
など) と冗長なメタデータや仕様のプロパティが削除されるように、上記のスキーマが少し簡略化されています。
componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
コンポーネントのスコープ
既定では、同じ環境内のすべての Dapr 対応コンテナー アプリは、デプロイされたコンポーネントの完全なセットを読み込みます。 実行時に適切なコンテナー アプリのみがコンポーネントを読み込むようにするには、アプリケーション スコープを使う必要があります。 次の例では、コンポーネントは、Dapr アプリケーション ID が APP-ID-1
と APP-ID-2
の 2 つの Dapr 対応コンテナー アプリによってのみ読み込まれます。
componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
scopes:
- [APP-ID-1]
- [APP-ID-2]
Note
Dapr コンポーネント スコープでは、より優れたセキュリティ対策が提供され、コンテナー アプリ名ではなく、コンテナー アプリの Dapr アプリケーション ID に対応します。
コンポーネントの例
Container Apps CLI を使用して Dapr コンポーネントを作成するには、コンテナー アプリの YAML マニフェストを使用できます。 複数のコンポーネントを構成する場合は、コンポーネントごとに別個の YAML ファイルを作成して適用する必要があります。
az containerapp env dapr-component set --name ENVIRONMENT_NAME --resource-group RESOURCE_GROUP_NAME --dapr-component-name pubsub --yaml "./pubsub.yaml"
# pubsub.yaml for Azure Service Bus component
componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "my-secret-store"
metadata:
- name: namespaceName
# Required when using Azure Authentication.
# Must be a fully-qualified domain name
value: "[your_servicebus_namespace.servicebus.windows.net]"
- name: azureTenantId
value: "[your_tenant_id]"
- name: azureClientId
value: "[your_client_id]"
- name: azureClientSecret
secretRef: azClientSecret
scopes:
- publisher-app
- subscriber-app