From 4dca82edbf13bd5c033f7a39bf7b4d802e136d21 Mon Sep 17 00:00:00 2001 From: Sandeep Nair Date: Tue, 18 Jun 2024 19:34:23 +0530 Subject: [PATCH 1/3] Update Dependencies, Make Cosmos connection using Managed Identity --- README.md | 8 +-- deploy/deploy-scaledobject.yaml | 22 -------- images/architecture.pptx | Bin 86559 -> 183296 bytes src/Scaler.Demo/OrderGenerator/Dockerfile | 29 ++++++---- ...CosmosDb.Scaler.Demo.OrderGenerator.csproj | 15 +++-- .../OrderGenerator/appsettings.json | 3 +- src/Scaler.Demo/OrderProcessor/Dockerfile | 29 ++++++---- ...CosmosDb.Scaler.Demo.OrderProcessor.csproj | 8 ++- src/Scaler.Demo/OrderProcessor/Worker.cs | 41 +++++++++++++- .../OrderProcessor/appsettings.json | 6 +- src/Scaler.Demo/OrderProcessor/deploy-cs.yaml | 26 +++++++++ .../deploy-scaledobject-cs.yaml | 22 ++++++++ .../OrderProcessor/deploy-scaledobject.yaml | 4 +- src/Scaler.Demo/OrderProcessor/deploy.yaml | 12 ++-- src/Scaler.Demo/README.md | 4 +- src/Scaler.Demo/Shared/CosmosDbConfig.cs | 2 + .../Keda.CosmosDb.Scaler.Demo.Shared.csproj | 4 +- .../CosmosDbScalerServiceTests.cs | 18 +++--- .../Keda.CosmosDb.Scaler.Tests.csproj | 2 +- src/Scaler/Dockerfile | 28 ++++++---- src/Scaler/Keda.CosmosDb.Scaler.csproj | 6 +- src/Scaler/Services/CosmosDbFactory.cs | 14 +++-- src/Scaler/Services/CosmosDbMetricProvider.cs | 52 +++++++++++++----- src/Scaler/Services/ScalerMetadata.cs | 14 ++++- src/Scaler/deploy-cs.yaml | 38 +++++++++++++ src/Scaler/deploy.yaml | 1 + 26 files changed, 294 insertions(+), 114 deletions(-) delete mode 100644 deploy/deploy-scaledobject.yaml create mode 100644 src/Scaler.Demo/OrderProcessor/deploy-cs.yaml create mode 100644 src/Scaler.Demo/OrderProcessor/deploy-scaledobject-cs.yaml create mode 100644 src/Scaler/deploy-cs.yaml diff --git a/README.md b/README.md index 25876d3..67d6d55 100644 --- a/README.md +++ b/README.md @@ -68,10 +68,10 @@ The specification below describes the `trigger` metadata in `ScaledObject` resou - type: external metadata: scalerAddress: external-scaler-azure-cosmos-db.keda:4050 # Mandatory. Address of the external scaler service. - connection: # Mandatory. Connection string of Cosmos DB account with monitored container. + endpoint: # Mandatory. Endpoint URL of Cosmos DB account with monitored container. databaseId: # Mandatory. ID of Cosmos DB database containing monitored container. containerId: # Mandatory. ID of monitored container. - leaseConnection: # Mandatory. Connection string of Cosmos DB account with lease container. + leaseEndpoint: # Mandatory. Endpoint URL of Cosmos DB account with lease container. leaseDatabaseId: # Mandatory. ID of Cosmos DB database containing lease container. leaseContainerId: # Mandatory. ID of lease container. processorName: # Mandatory. Name of change-feed processor used by listener application. @@ -81,13 +81,13 @@ The specification below describes the `trigger` metadata in `ScaledObject` resou - **`scalerAddress`** - Address of the external scaler service. This would be in format `.:`. If you installed Azure Cosmos DB external scaler Helm chart in `keda` namespace and did not specify custom values, the metadata value would be `external-scaler-azure-cosmos-db.keda:4050`. -- **`connection`** - Connection string of the Cosmos DB account that contains the monitored container. +- **`endpoint`** - Endpoint URL of the Cosmos DB account that contains the monitored container. - **`databaseId`** - ID of Cosmos DB database that contains the monitored container. - **`containerId`** - ID of the monitored container. -- **`leaseConnection`** - Connection string of the Cosmos DB account that contains the lease container. This can be same or different from the value of `connection` metadata. +- **`leaseEndpoint`** - Endpoint URL of the Cosmos DB account that contains the lease container. This can be same or different from the value of `connection` metadata. - **`leaseDatabaseId`** - ID of Cosmos DB database that contains the lease container. This can be same or different from the value of `databaseId` metadata. diff --git a/deploy/deploy-scaledobject.yaml b/deploy/deploy-scaledobject.yaml deleted file mode 100644 index e9c4ffe..0000000 --- a/deploy/deploy-scaledobject.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Template scaled-object for using KEDA external scaler for Azure Cosmos DB. - -apiVersion: keda.sh/v1alpha1 -kind: ScaledObject -metadata: - name: - namespace: default -spec: - pollingInterval: 20 - scaleTargetRef: - name: - triggers: - - type: external - metadata: - scalerAddress: external-scaler-azure-cosmos-db.keda:4050 - connection: - databaseId: - containerId: - leaseConnection: - leaseDatabaseId: - leaseContainerId: - processorName: diff --git a/images/architecture.pptx b/images/architecture.pptx index a75e24b245b38886e03986b28eb6e982a670c506..0e5ed3f6faffe4eca22997afd936ffb4f0aa4753 100644 GIT binary patch literal 183296 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�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�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 IfAa5N0QU+zo&W#< literal 86559 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 - + Exe net6.0 + Linux + ..\.. - - + - + + - - - + \ No newline at end of file diff --git a/src/Scaler.Demo/OrderGenerator/appsettings.json b/src/Scaler.Demo/OrderGenerator/appsettings.json index cf68f86..1c89f94 100644 --- a/src/Scaler.Demo/OrderGenerator/appsettings.json +++ b/src/Scaler.Demo/OrderGenerator/appsettings.json @@ -1,6 +1,7 @@ { "CosmosDbConfig": { - "Connection": "", + "Endpoint": "https://{Cosmos Account Name}.documents.azure.com:443/", + "Connection": "", "DatabaseId": "StoreDatabase", "ContainerId": "OrderContainer", "ContainerThroughput": 11000 diff --git a/src/Scaler.Demo/OrderProcessor/Dockerfile b/src/Scaler.Demo/OrderProcessor/Dockerfile index 0e8a0d6..d7a7337 100644 --- a/src/Scaler.Demo/OrderProcessor/Dockerfile +++ b/src/Scaler.Demo/OrderProcessor/Dockerfile @@ -1,16 +1,23 @@ -# https://hub.docker.com/_/microsoft-dotnet +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base +WORKDIR /app -# Restore, build and publish project. FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build -WORKDIR / -COPY src/Scaler.Demo/OrderProcessor/ src/Scaler.Demo/OrderProcessor/ -COPY src/Scaler.Demo/Shared/ src/Scaler.Demo/Shared/ +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["Scaler.Demo/OrderProcessor/Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj", "Scaler.Demo/OrderProcessor/"] +COPY ["Scaler.Demo/Shared/Keda.CosmosDb.Scaler.Demo.Shared.csproj", "Scaler.Demo/Shared/"] +RUN dotnet restore "./Scaler.Demo/OrderProcessor/Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj" +COPY . . +WORKDIR "/src/Scaler.Demo/OrderProcessor" +RUN dotnet build "./Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj" -c $BUILD_CONFIGURATION -o /app/build -WORKDIR /src/Scaler.Demo/OrderProcessor -RUN dotnet publish --configuration Release --output /app +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false -# Stage application. -FROM mcr.microsoft.com/dotnet/runtime:6.0 +FROM base AS final WORKDIR /app -COPY --from=build /app . -ENTRYPOINT ["dotnet", "Keda.CosmosDb.Scaler.Demo.OrderProcessor.dll"] +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "Keda.CosmosDb.Scaler.Demo.OrderProcessor.dll"] \ No newline at end of file diff --git a/src/Scaler.Demo/OrderProcessor/Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj b/src/Scaler.Demo/OrderProcessor/Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj index 2d07aa2..6ad917f 100644 --- a/src/Scaler.Demo/OrderProcessor/Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj +++ b/src/Scaler.Demo/OrderProcessor/Keda.CosmosDb.Scaler.Demo.OrderProcessor.csproj @@ -2,12 +2,16 @@ net6.0 + Linux + ..\.. + - - + + + diff --git a/src/Scaler.Demo/OrderProcessor/Worker.cs b/src/Scaler.Demo/OrderProcessor/Worker.cs index 949a69d..13db396 100644 --- a/src/Scaler.Demo/OrderProcessor/Worker.cs +++ b/src/Scaler.Demo/OrderProcessor/Worker.cs @@ -7,6 +7,8 @@ using Microsoft.Azure.Cosmos; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Azure.Identity; +using static Azure.Core.HttpHeader; namespace Keda.CosmosDb.Scaler.Demo.OrderProcessor { @@ -25,8 +27,27 @@ public Worker(CosmosDbConfig cosmosDbConfig, ILogger logger) public override async Task StartAsync(CancellationToken cancellationToken) { - Database leaseDatabase = await new CosmosClient(_cosmosDbConfig.LeaseConnection) - .CreateDatabaseIfNotExistsAsync(_cosmosDbConfig.LeaseDatabaseId, cancellationToken: cancellationToken); + Database leaseDatabase; + + // Create a new instance of the CosmosClient with a custom name + CosmosClientOptions clientOptions = new CosmosClientOptions + { + ApplicationName = "keda-external-azure-cosmos-db" + }; + + if (string.IsNullOrEmpty(_cosmosDbConfig.LeaseConnection)) + { + var credential = new DefaultAzureCredential(); + + leaseDatabase = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.LeaseEndpoint, credential, clientOptions) + .GetDatabase(_cosmosDbConfig.LeaseDatabaseId); + } + else + { + leaseDatabase = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.LeaseConnection, clientOptions) + + .GetDatabase(_cosmosDbConfig.LeaseDatabaseId); + } Container leaseContainer = await leaseDatabase .CreateContainerIfNotExistsAsync( @@ -37,7 +58,21 @@ public override async Task StartAsync(CancellationToken cancellationToken) // Change feed processor instance name should be unique for each container application. string instanceName = $"Instance-{Dns.GetHostName()}"; - _processor = new CosmosClient(_cosmosDbConfig.Connection) + + CosmosClient cosmosClient; + + if (string.IsNullOrEmpty(_cosmosDbConfig.Connection)) + { + var credential = new DefaultAzureCredential(); + + cosmosClient = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.Endpoint, credential); + } + else + { + cosmosClient = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.Connection); + } + + _processor = cosmosClient .GetContainer(_cosmosDbConfig.DatabaseId, _cosmosDbConfig.ContainerId) .GetChangeFeedProcessorBuilder(_cosmosDbConfig.ProcessorName, ProcessOrdersAsync) .WithInstanceName(instanceName) diff --git a/src/Scaler.Demo/OrderProcessor/appsettings.json b/src/Scaler.Demo/OrderProcessor/appsettings.json index b4881a3..61fdba3 100644 --- a/src/Scaler.Demo/OrderProcessor/appsettings.json +++ b/src/Scaler.Demo/OrderProcessor/appsettings.json @@ -7,10 +7,12 @@ } }, "CosmosDbConfig": { - "Connection": "", + "Endpoint": "https://{Cosmos Account Name}.documents.azure.com:443/", + "Connection": "", "DatabaseId": "StoreDatabase", "ContainerId": "OrderContainer", - "LeaseConnection": "", + "LeaseEndpoint": "https://{Cosmos Account Name}.documents.azure.com:443/", + "LeaseConnection": "", "LeaseDatabaseId": "StoreDatabase", "LeaseContainerId": "OrderProcessorLeases", "ProcessorName": "OrderProcessor" diff --git a/src/Scaler.Demo/OrderProcessor/deploy-cs.yaml b/src/Scaler.Demo/OrderProcessor/deploy-cs.yaml new file mode 100644 index 0000000..9ae5b38 --- /dev/null +++ b/src/Scaler.Demo/OrderProcessor/deploy-cs.yaml @@ -0,0 +1,26 @@ +# Deploy order processor application. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cosmosdb-order-processor + namespace: default +spec: + replicas: 1 # A replica is required to be up momentarily to initialize the change-feed. + selector: + matchLabels: + app: cosmosdb-order-processor + template: + metadata: + labels: + app: cosmosdb-order-processor + spec: + containers: + - name: cosmosdb-order-processor + image: /cosmosdb-order-processor:latest + imagePullPolicy: Always + env: + - name: CosmosDbConfig__Connection + value: + - name: CosmosDbConfig__LeaseConnection + value: diff --git a/src/Scaler.Demo/OrderProcessor/deploy-scaledobject-cs.yaml b/src/Scaler.Demo/OrderProcessor/deploy-scaledobject-cs.yaml new file mode 100644 index 0000000..2857a4a --- /dev/null +++ b/src/Scaler.Demo/OrderProcessor/deploy-scaledobject-cs.yaml @@ -0,0 +1,22 @@ +# Create KEDA scaled object to scale order processor application. + +apiVersion: keda.sh/v1alpha1 +kind: ScaledObject +metadata: + name: cosmosdb-order-processor-scaledobject + namespace: default +spec: + pollingInterval: 20 + scaleTargetRef: + name: cosmosdb-order-processor + triggers: + - type: external + metadata: + scalerAddress: cosmosdb-scaler.default:4050 + connection: + databaseId: StoreDatabase + containerId: OrderContainer + leaseConnection: + leaseDatabaseId: StoreDatabase + leaseContainerId: OrderProcessorLeases + processorName: OrderProcessor diff --git a/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml b/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml index 2857a4a..14ab346 100644 --- a/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml +++ b/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml @@ -13,10 +13,10 @@ spec: - type: external metadata: scalerAddress: cosmosdb-scaler.default:4050 - connection: + endpoint: databaseId: StoreDatabase containerId: OrderContainer - leaseConnection: + leaseEndpoint: leaseDatabaseId: StoreDatabase leaseContainerId: OrderProcessorLeases processorName: OrderProcessor diff --git a/src/Scaler.Demo/OrderProcessor/deploy.yaml b/src/Scaler.Demo/OrderProcessor/deploy.yaml index 9ae5b38..359e935 100644 --- a/src/Scaler.Demo/OrderProcessor/deploy.yaml +++ b/src/Scaler.Demo/OrderProcessor/deploy.yaml @@ -5,6 +5,9 @@ kind: Deployment metadata: name: cosmosdb-order-processor namespace: default + labels: + aadpodidbinding: "my-pod-identity" # refer to https://learn.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity#create-a-pod-identity + app: cosmosdb-order-processor spec: replicas: 1 # A replica is required to be up momentarily to initialize the change-feed. selector: @@ -14,13 +17,14 @@ spec: metadata: labels: app: cosmosdb-order-processor + aadpodidbinding: "my-pod-identity" # refer to https://learn.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity#create-a-pod-identity spec: containers: - name: cosmosdb-order-processor image: /cosmosdb-order-processor:latest imagePullPolicy: Always env: - - name: CosmosDbConfig__Connection - value: - - name: CosmosDbConfig__LeaseConnection - value: + - name: CosmosDbConfig__Endpoint + value: + - name: CosmosDbConfig__LeaseEndpoint + value: diff --git a/src/Scaler.Demo/README.md b/src/Scaler.Demo/README.md index 3cbde1e..b383a5a 100644 --- a/src/Scaler.Demo/README.md +++ b/src/Scaler.Demo/README.md @@ -21,8 +21,8 @@ We will later deploy the order-processor application to Kubernetes cluster and u 1. Run the below commands to build the Docker container images for order-generator and order-processor applications. ```text - # docker build --file .\src\Scaler.Demo\OrderGenerator\Dockerfile --force-rm --tag cosmosdb-order-generator . - # docker build --file .\src\Scaler.Demo\OrderProcessor\Dockerfile --force-rm --tag cosmosdb-order-processor . + # docker build --file .\src\Scaler.Demo\OrderGenerator\Dockerfile --force-rm --tag cosmosdb-order-generator .\src + # docker build --file .\src\Scaler.Demo\OrderProcessor\Dockerfile --force-rm --tag cosmosdb-order-processor .\src ``` 1. Create test-database and test-container within the database in Cosmos DB account by running the order-generator application inside the container with `setup` option. Make sure to put the connection string of Cosmos DB account in the command below. diff --git a/src/Scaler.Demo/Shared/CosmosDbConfig.cs b/src/Scaler.Demo/Shared/CosmosDbConfig.cs index 4e78f08..a87278c 100644 --- a/src/Scaler.Demo/Shared/CosmosDbConfig.cs +++ b/src/Scaler.Demo/Shared/CosmosDbConfig.cs @@ -5,11 +5,13 @@ namespace Keda.CosmosDb.Scaler.Demo.Shared public class CosmosDbConfig { public string Connection { get; set; } + public string Endpoint { get; set; } public string DatabaseId { get; set; } public string ContainerId { get; set; } public int ContainerThroughput { get; set; } public string LeaseConnection { get; set; } + public string LeaseEndpoint { get; set; } public string LeaseDatabaseId { get; set; } public string LeaseContainerId { get; set; } public string ProcessorName { get; set; } diff --git a/src/Scaler.Demo/Shared/Keda.CosmosDb.Scaler.Demo.Shared.csproj b/src/Scaler.Demo/Shared/Keda.CosmosDb.Scaler.Demo.Shared.csproj index 6b5fb47..cbd93f4 100644 --- a/src/Scaler.Demo/Shared/Keda.CosmosDb.Scaler.Demo.Shared.csproj +++ b/src/Scaler.Demo/Shared/Keda.CosmosDb.Scaler.Demo.Shared.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -6,7 +6,7 @@ - + diff --git a/src/Scaler.Tests/CosmosDbScalerServiceTests.cs b/src/Scaler.Tests/CosmosDbScalerServiceTests.cs index 4e2dc47..8ed3cb2 100644 --- a/src/Scaler.Tests/CosmosDbScalerServiceTests.cs +++ b/src/Scaler.Tests/CosmosDbScalerServiceTests.cs @@ -18,10 +18,10 @@ public CosmosDbScalerServiceTests() } [Theory] - [InlineData("connection")] + [InlineData("endpoint")] [InlineData("databaseId")] [InlineData("containerId")] - [InlineData("leaseConnection")] + [InlineData("leaseEndpoint")] [InlineData("leaseDatabaseId")] [InlineData("leaseContainerId")] [InlineData("processorName")] @@ -50,10 +50,10 @@ public async Task IsActive_ReturnsFalseOnNonZeroPartitions(long partitionCount) } [Theory] - [InlineData("connection")] + [InlineData("endpoint")] [InlineData("databaseId")] [InlineData("containerId")] - [InlineData("leaseConnection")] + [InlineData("leaseEndpoint")] [InlineData("leaseDatabaseId")] [InlineData("leaseContainerId")] [InlineData("processorName")] @@ -99,10 +99,10 @@ public async Task GetMetrics_ReturnsSameMetricNameIfPassed(string requestMetricN } [Theory] - [InlineData("connection")] + [InlineData("endpoint")] [InlineData("databaseId")] [InlineData("containerId")] - [InlineData("leaseConnection")] + [InlineData("leaseEndpoint")] [InlineData("leaseDatabaseId")] [InlineData("leaseContainerId")] [InlineData("processorName")] @@ -144,7 +144,7 @@ public async Task GetMetricSpec_ReturnsSameMetricNameIfPassed(string requestMetr public async Task GetMetricSpec_ReturnsNormalizedMetricName() { ScaledObjectRef request = GetScaledObjectRef(); - request.ScalerMetadata["leaseConnection"] = "AccountEndpoint=https://example.com:443/;AccountKey=ZHVtbXky"; + request.ScalerMetadata["leaseEndpoint"] = "https://example.com:443/"; request.ScalerMetadata["leaseDatabaseId"] = "Dummy.Lease.Database.Id"; request.ScalerMetadata["leaseContainerId"] = "Dummy:Lease:Container:Id"; request.ScalerMetadata["processorName"] = "Dummy%Processor%Name"; @@ -194,10 +194,10 @@ private static ScaledObjectRef GetScaledObjectRef() MapField scalerMetadata = scaledObjectRef.ScalerMetadata; - scalerMetadata["connection"] = "AccountEndpoint=https://example1.com:443/;AccountKey=ZHVtbXkx"; + scalerMetadata["endpoint"] = "https://example1.com:443/"; scalerMetadata["databaseId"] = "dummy-database-id"; scalerMetadata["containerId"] = "dummy-container-id"; - scalerMetadata["leaseConnection"] = "AccountEndpoint=https://example2.com:443/;AccountKey=ZHVtbXky"; + scalerMetadata["leaseEndpoint"] = "https://example2.com:443/"; scalerMetadata["leaseDatabaseId"] = "dummy-lease-database-id"; scalerMetadata["leaseContainerId"] = "dummy-lease-container-id"; scalerMetadata["processorName"] = "dummy-processor-name"; diff --git a/src/Scaler.Tests/Keda.CosmosDb.Scaler.Tests.csproj b/src/Scaler.Tests/Keda.CosmosDb.Scaler.Tests.csproj index 5633867..949b77b 100644 --- a/src/Scaler.Tests/Keda.CosmosDb.Scaler.Tests.csproj +++ b/src/Scaler.Tests/Keda.CosmosDb.Scaler.Tests.csproj @@ -14,7 +14,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/Scaler/Dockerfile b/src/Scaler/Dockerfile index 8dc7f6f..2badb05 100644 --- a/src/Scaler/Dockerfile +++ b/src/Scaler/Dockerfile @@ -1,15 +1,23 @@ -# https://hub.docker.com/_/microsoft-dotnet +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 -# Restore, build and publish project. FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build -WORKDIR / -COPY src/Scaler/ src/Scaler/ +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["Scaler/Keda.CosmosDb.Scaler.csproj", "Scaler/"] +RUN dotnet restore "./Scaler/Keda.CosmosDb.Scaler.csproj" +COPY . . +WORKDIR "/src/Scaler" +RUN dotnet build "./Keda.CosmosDb.Scaler.csproj" -c $BUILD_CONFIGURATION -o /app/build -WORKDIR /src/Scaler -RUN dotnet publish --configuration Release --output /app +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./Keda.CosmosDb.Scaler.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false -# Stage application. -FROM mcr.microsoft.com/dotnet/aspnet:6.0 +FROM base AS final WORKDIR /app -COPY --from=build /app . -ENTRYPOINT ["dotnet", "Keda.CosmosDb.Scaler.dll"] +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "Keda.CosmosDb.Scaler.dll"] \ No newline at end of file diff --git a/src/Scaler/Keda.CosmosDb.Scaler.csproj b/src/Scaler/Keda.CosmosDb.Scaler.csproj index 9c9c6e8..48dcbbb 100644 --- a/src/Scaler/Keda.CosmosDb.Scaler.csproj +++ b/src/Scaler/Keda.CosmosDb.Scaler.csproj @@ -2,6 +2,7 @@ net6.0 + Linux @@ -9,10 +10,13 @@ + - + + + diff --git a/src/Scaler/Services/CosmosDbFactory.cs b/src/Scaler/Services/CosmosDbFactory.cs index 25cf364..ffd5c4e 100644 --- a/src/Scaler/Services/CosmosDbFactory.cs +++ b/src/Scaler/Services/CosmosDbFactory.cs @@ -1,5 +1,6 @@ using System.Collections.Concurrent; using Microsoft.Azure.Cosmos; +using Azure.Identity; namespace Keda.CosmosDb.Scaler { @@ -9,14 +10,19 @@ internal sealed class CosmosDbFactory // maintain a single instance of CosmosClient per lifetime of the application. private readonly ConcurrentDictionary _cosmosClientCache = new(); - public CosmosClient GetCosmosClient(string connection) + public CosmosClient GetCosmosClient(string endpoint) { - return _cosmosClientCache.GetOrAdd(connection, CreateCosmosClient); + return _cosmosClientCache.GetOrAdd(endpoint, CreateCosmosClient); } - private CosmosClient CreateCosmosClient(string connection) + //private CosmosClient CreateCosmosClient(string connection) + private CosmosClient CreateCosmosClient(string endpoint) { - return new CosmosClient(connection, new CosmosClientOptions { ConnectionMode = ConnectionMode.Gateway }); + + var credential = new DefaultAzureCredential(); + return new Microsoft.Azure.Cosmos.CosmosClient(endpoint, credential, new CosmosClientOptions { ConnectionMode = ConnectionMode.Gateway }); + + } } } diff --git a/src/Scaler/Services/CosmosDbMetricProvider.cs b/src/Scaler/Services/CosmosDbMetricProvider.cs index 61242dc..f8408c0 100644 --- a/src/Scaler/Services/CosmosDbMetricProvider.cs +++ b/src/Scaler/Services/CosmosDbMetricProvider.cs @@ -3,9 +3,16 @@ using System.Net; using System.Net.Http; using System.Threading.Tasks; +using Azure.Identity; +using Microsoft.AspNetCore.Http; using Microsoft.Azure.Cosmos; using Microsoft.Extensions.Logging; - +using Microsoft.Identity.Client.Platforms.Features.DesktopOs.Kerberos; +using Container = Microsoft.Azure.Cosmos.Container; +using System.Diagnostics.Metrics; +using OpenTelemetry; +using OpenTelemetry.Metrics; +using Microsoft.Identity.Client; namespace Keda.CosmosDb.Scaler { internal sealed class CosmosDbMetricProvider : ICosmosDbMetricProvider @@ -13,37 +20,56 @@ internal sealed class CosmosDbMetricProvider : ICosmosDbMetricProvider private readonly CosmosDbFactory _factory; private readonly ILogger _logger; + static Meter s_meter = new Meter("OrderProcessor.CFStore", "1.0.0"); + private static Counter s_CFRecordsReceived = s_meter.CreateCounter("RecordsReceived"); + private static Counter s_CFProcessorCount = s_meter.CreateCounter("ProcessorCount"); public CosmosDbMetricProvider(CosmosDbFactory factory, ILogger logger) { _factory = factory ?? throw new ArgumentNullException(nameof(factory)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + + using MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder() + .AddMeter("OrderProcessor.CFStore") + .Build(); } public async Task GetPartitionCountAsync(ScalerMetadata scalerMetadata) { try { - Container leaseContainer = _factory - .GetCosmosClient(scalerMetadata.LeaseConnection) - .GetContainer(scalerMetadata.LeaseDatabaseId, scalerMetadata.LeaseContainerId); - ChangeFeedEstimator estimator = _factory - .GetCosmosClient(scalerMetadata.Connection) - .GetContainer(scalerMetadata.DatabaseId, scalerMetadata.ContainerId) - .GetChangeFeedEstimator(scalerMetadata.ProcessorName, leaseContainer); + var credential = new DefaultAzureCredential(); + var cosmosClient = new CosmosClient(scalerMetadata.Endpoint, credential); + + + Container leaseContainer = cosmosClient.GetContainer(scalerMetadata.LeaseDatabaseId, scalerMetadata.LeaseContainerId); + Container monitoredContainer = cosmosClient.GetContainer(scalerMetadata.DatabaseId, scalerMetadata.ContainerId); - // It does not help by creating more change-feed processing instances than the number of partitions. + + ChangeFeedEstimator changeFeedEstimator = monitoredContainer.GetChangeFeedEstimator("SalesOrderChangeFeed", leaseContainer); + + using FeedIterator estimatorIterator = changeFeedEstimator.GetCurrentStateIterator(); int partitionCount = 0; - using (FeedIterator iterator = estimator.GetCurrentStateIterator()) + long lagCount=0; + while (estimatorIterator.HasMoreResults) { - while (iterator.HasMoreResults) + FeedResponse states = await estimatorIterator.ReadNextAsync(); + + foreach (ChangeFeedProcessorState leaseState in states) { - FeedResponse states = await iterator.ReadNextAsync(); - partitionCount += states.Where(state => state.EstimatedLag > 0).Count(); + string host = leaseState.InstanceName == null ? $"not owned by any host currently" : $"owned by host {leaseState.InstanceName}"; + _logger.LogInformation($"Lease [{leaseState.LeaseToken}] {host} reports {leaseState.EstimatedLag} as estimated lag."); + lagCount = lagCount + leaseState.EstimatedLag; + } + partitionCount += states.Where(state => state.EstimatedLag > 0).Count(); } + s_CFRecordsReceived.Add(lagCount); + s_CFProcessorCount.Add(partitionCount); + _logger.LogInformation($"Count of Partitions with lag:{partitionCount}"); + return partitionCount; } catch (CosmosException exception) diff --git a/src/Scaler/Services/ScalerMetadata.cs b/src/Scaler/Services/ScalerMetadata.cs index a2b6d74..759a9cd 100644 --- a/src/Scaler/Services/ScalerMetadata.cs +++ b/src/Scaler/Services/ScalerMetadata.cs @@ -10,9 +10,11 @@ internal sealed class ScalerMetadata private string _metricName; public string Connection { get; set; } + public string Endpoint { get; set; } public string DatabaseId { get; set; } public string ContainerId { get; set; } public string LeaseConnection { get; set; } + public string LeaseEndpoint { get; set; } public string LeaseDatabaseId { get; set; } public string LeaseContainerId { get; set; } public string ProcessorName { get; set; } @@ -39,8 +41,16 @@ private string LeaseAccountHost { get { - var builder = new DbConnectionStringBuilder { ConnectionString = this.LeaseConnection }; - return new Uri((string)builder["AccountEndpoint"]).Host; + if(!string.IsNullOrEmpty(this.LeaseConnection)) + { + var builder = new DbConnectionStringBuilder { ConnectionString = this.LeaseConnection }; + return new Uri((string)builder["AccountEndpoint"]).Host; + } + else + { + return new Uri(this.LeaseEndpoint).Host; + } + } } diff --git a/src/Scaler/deploy-cs.yaml b/src/Scaler/deploy-cs.yaml new file mode 100644 index 0000000..9e2bb6a --- /dev/null +++ b/src/Scaler/deploy-cs.yaml @@ -0,0 +1,38 @@ +# Deploy KEDA external scaler for Azure Cosmos DB. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cosmosdb-scaler + namespace: default +spec: + replicas: 1 + selector: + matchLabels: + app: cosmosdb-scaler + template: + metadata: + labels: + app: cosmosdb-scaler + spec: + containers: + - image: /cosmosdb-scaler:latest + imagePullPolicy: Always + name: cosmosdb-scaler + ports: + - containerPort: 4050 + +--- +# Assign hostname to the scaler application. + +apiVersion: v1 +kind: Service +metadata: + name: cosmosdb-scaler + namespace: default +spec: + ports: + - port: 4050 + targetPort: 4050 + selector: + app: cosmosdb-scaler diff --git a/src/Scaler/deploy.yaml b/src/Scaler/deploy.yaml index 9e2bb6a..02c3840 100644 --- a/src/Scaler/deploy.yaml +++ b/src/Scaler/deploy.yaml @@ -13,6 +13,7 @@ spec: template: metadata: labels: + aadpodidbinding: "my-pod-identity" # refer to https://learn.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity#create-a-pod-identity app: cosmosdb-scaler spec: containers: From 64981845397c73b22e225002f207651445b8a05e Mon Sep 17 00:00:00 2001 From: Sandeep Nair Date: Tue, 18 Jun 2024 20:30:43 +0530 Subject: [PATCH 2/3] Updating Readme for Managed Identity configuration steps --- src/Scaler.Demo/OrderProcessor/appsettings.json | 4 ---- src/Scaler.Demo/README.md | 11 ++++++++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Scaler.Demo/OrderProcessor/appsettings.json b/src/Scaler.Demo/OrderProcessor/appsettings.json index 61fdba3..1bc4f7b 100644 --- a/src/Scaler.Demo/OrderProcessor/appsettings.json +++ b/src/Scaler.Demo/OrderProcessor/appsettings.json @@ -7,12 +7,8 @@ } }, "CosmosDbConfig": { - "Endpoint": "https://{Cosmos Account Name}.documents.azure.com:443/", - "Connection": "", "DatabaseId": "StoreDatabase", "ContainerId": "OrderContainer", - "LeaseEndpoint": "https://{Cosmos Account Name}.documents.azure.com:443/", - "LeaseConnection": "", "LeaseDatabaseId": "StoreDatabase", "LeaseContainerId": "OrderProcessorLeases", "ProcessorName": "OrderProcessor" diff --git a/src/Scaler.Demo/README.md b/src/Scaler.Demo/README.md index b383a5a..ad8779b 100644 --- a/src/Scaler.Demo/README.md +++ b/src/Scaler.Demo/README.md @@ -12,6 +12,7 @@ We will later deploy the order-processor application to Kubernetes cluster and u - [Azure Cosmos DB account](https://azure.microsoft.com/free/cosmos-db/) - [Docker Hub account](https://hub.docker.com/signup) - Kubernetes cluster +- [Use pod-managed identities in Azure Kubernetes Service](https://learn.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity) - [Docker Desktop](https://www.docker.com/products/docker-desktop) ## Testing sample application locally on Docker @@ -95,6 +96,10 @@ We will later deploy the order-processor application to Kubernetes cluster and u 1. Follow one of the steps on [Deploying KEDA](https://keda.sh/docs/deploy/) documentation page to deploy KEDA on your Kubernetes cluster. +1. Cosmos DB supports key-based and managed identity-based authentication, both of which are supported by KEDA. Since pod managed identity is more secure, we will use it as the default. Steps for connection string-based authentication are also provided. To set up managed identity-based authentication in Cosmos DB and AKS, follow the steps below: + 1. [Configure role-based access control with Microsoft Entra ID for your Azure Cosmos DB account](https://learn.microsoft.com/en-us/azure/cosmos-db/how-to-setup-rbac) + 1. [Use pod-managed identities in Azure Kubernetes Service](https://learn.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity) + 1. Open command prompt or shell and change to the root directory of the cloned repo. 1. Build container image for the external scaler and push the image to Docker Hub. Make sure to replace `` in below commands with your Docker ID. @@ -106,11 +111,12 @@ We will later deploy the order-processor application to Kubernetes cluster and u # docker push /cosmosdb-scaler:latest ``` -1. Update your Docker ID in the image path in manifest file `src/Scaler/deploy.yaml` and apply it to deploy the external scaler application. +1. Update your Docker ID in the image path in manifest file `src/Scaler/deploy.yaml` and apply it to deploy the external scaler application. ```text kubectl apply --filename=src/Scaler/deploy.yaml ``` + > **Note:** In case you are not using managed identity-based authentication in Cosmos DB then use `src/Scaler/deploy-cs.yaml` in the above step. ## Deploying sample application to cluster @@ -127,6 +133,8 @@ We will later deploy the order-processor application to Kubernetes cluster and u ```text kubectl apply --filename=src/Scaler.Demo/OrderProcessor/deploy.yaml ``` + + > **Note:** In case you are not using managed identity-based authentication in Cosmos DB then use `src/Scaler/deploy-cs.yaml` in the above step. 1. Ensure that the order-processor application is running correctly on the cluster by checking application logs. The application will create lease database and container if they do not exist, hence it is needed to run for a few seconds before we enable auto-scaling for it, as that would immediately bring replicas to 0 if there are no orders pending to be processed. @@ -146,6 +154,7 @@ We will later deploy the order-processor application to Kubernetes cluster and u ```text kubectl apply --filename=src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml ``` + > **Note:** In case you are not using identity-based authentication in Cosmos DB then use `src/Scaler/deploy-scaledobject-cs.yaml` in the above step. > **Note** Ideally, we would have created `TriggerAuthentication` resource that would enable sharing of the connection strings as secrets between the scaled object and the target application. However, this is not possible since at the moment, the triggers of `external` type do not support referencing a `TriggerAuthentication` resource ([link](https://keda.sh/docs/scalers/external/#authentication-parameters)). From e941b5fad1dd1c6baee8406eccdcb0a2b81305db Mon Sep 17 00:00:00 2001 From: Sandeep Nair Date: Fri, 28 Jun 2024 11:03:59 +0530 Subject: [PATCH 3/3] Addressing review comments --- README.md | 4 +- deploy/deploy-scaledobject-cs.yaml | 22 ++++++++ deploy/deploy-scaledobject.yaml | 22 ++++++++ src/Scaler.Demo/OrderProcessor/Worker.cs | 55 +++++++++++-------- .../OrderProcessor/deploy-scaledobject.yaml | 4 +- src/Scaler.Demo/README.md | 5 +- .../CosmosDbScalerServiceTests.cs | 9 +++ src/Scaler/Services/CosmosDbFactory.cs | 19 +++++-- src/Scaler/Services/CosmosDbMetricProvider.cs | 44 ++++++++++++--- 9 files changed, 142 insertions(+), 42 deletions(-) create mode 100644 deploy/deploy-scaledobject-cs.yaml create mode 100644 deploy/deploy-scaledobject.yaml diff --git a/README.md b/README.md index 67d6d55..2f29f41 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ The external scaler calls Cosmos DB APIs to estimate the amount of changes pendi Create `ScaledObject` resource that contains the information about your application (the scale target), the external scaler service, Cosmos DB containers, and other scaling configuration values. Check [`ScaledObject` specification](https://keda.sh/docs/concepts/scaling-deployments/) and [`External` trigger specification](https://keda.sh/docs/scalers/external/) for information on different properties supported for `ScaledObject` and their allowed values. -You can use file `deploy/deploy-scaledobject.yaml` as a template for creating the `ScaledObject`. The trigger metadata properties required to use the external scaler for Cosmos DB are described in [Trigger Specification](#trigger-specification) section below. +You can use the `deploy/deploy-scaledobject.yaml` file as a template for creating the `ScaledObject` when connecting to Cosmos DB with a managed identity. If you are using a connection string for the connection, use the `deploy/deploy-scaledobject-cs.yaml` file as your template instead. The trigger metadata properties required to use the external scaler for Cosmos DB are described in [Trigger Specification](#trigger-specification) section below. > **Note:** If you are having trouble setting up the external scaler or the listener application, the step-by-step instructions for [deploying the sample application](./src/Scaler.Demo/README.md) might help. @@ -87,7 +87,7 @@ The specification below describes the `trigger` metadata in `ScaledObject` resou - **`containerId`** - ID of the monitored container. -- **`leaseEndpoint`** - Endpoint URL of the Cosmos DB account that contains the lease container. This can be same or different from the value of `connection` metadata. +- **`leaseEndpoint`** - Endpoint URL of the Cosmos DB account that contains the lease container. This can be same or different from the value of `endpoint` metadata. - **`leaseDatabaseId`** - ID of Cosmos DB database that contains the lease container. This can be same or different from the value of `databaseId` metadata. diff --git a/deploy/deploy-scaledobject-cs.yaml b/deploy/deploy-scaledobject-cs.yaml new file mode 100644 index 0000000..e9c4ffe --- /dev/null +++ b/deploy/deploy-scaledobject-cs.yaml @@ -0,0 +1,22 @@ +# Template scaled-object for using KEDA external scaler for Azure Cosmos DB. + +apiVersion: keda.sh/v1alpha1 +kind: ScaledObject +metadata: + name: + namespace: default +spec: + pollingInterval: 20 + scaleTargetRef: + name: + triggers: + - type: external + metadata: + scalerAddress: external-scaler-azure-cosmos-db.keda:4050 + connection: + databaseId: + containerId: + leaseConnection: + leaseDatabaseId: + leaseContainerId: + processorName: diff --git a/deploy/deploy-scaledobject.yaml b/deploy/deploy-scaledobject.yaml new file mode 100644 index 0000000..5ebbff9 --- /dev/null +++ b/deploy/deploy-scaledobject.yaml @@ -0,0 +1,22 @@ +# Template scaled-object for using KEDA external scaler for Azure Cosmos DB. + +apiVersion: keda.sh/v1alpha1 +kind: ScaledObject +metadata: + name: + namespace: default +spec: + pollingInterval: 20 + scaleTargetRef: + name: + triggers: + - type: external + metadata: + scalerAddress: external-scaler-azure-cosmos-db.keda:4050 + endpoint: + databaseId: + containerId: + leaseEndpoint: + leaseDatabaseId: + leaseContainerId: + processorName: diff --git a/src/Scaler.Demo/OrderProcessor/Worker.cs b/src/Scaler.Demo/OrderProcessor/Worker.cs index 13db396..683f527 100644 --- a/src/Scaler.Demo/OrderProcessor/Worker.cs +++ b/src/Scaler.Demo/OrderProcessor/Worker.cs @@ -28,25 +28,47 @@ public Worker(CosmosDbConfig cosmosDbConfig, ILogger logger) public override async Task StartAsync(CancellationToken cancellationToken) { Database leaseDatabase; + CosmosClient cosmosClient; + + if (string.IsNullOrEmpty(_cosmosDbConfig.Connection)) + { + var credential = new DefaultAzureCredential(); - // Create a new instance of the CosmosClient with a custom name - CosmosClientOptions clientOptions = new CosmosClientOptions + cosmosClient = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.Endpoint, credential); + } + else { - ApplicationName = "keda-external-azure-cosmos-db" - }; + cosmosClient = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.Connection); + } + //use connection string or credentials if (string.IsNullOrEmpty(_cosmosDbConfig.LeaseConnection)) { - var credential = new DefaultAzureCredential(); - leaseDatabase = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.LeaseEndpoint, credential, clientOptions) - .GetDatabase(_cosmosDbConfig.LeaseDatabaseId); + // maintain a single instance of CosmosClient per lifetime of the application. + if (_cosmosDbConfig.LeaseEndpoint == _cosmosDbConfig.Endpoint) + { + leaseDatabase = await cosmosClient.CreateDatabaseIfNotExistsAsync(_cosmosDbConfig.LeaseDatabaseId); + } + else + { + var credential = new DefaultAzureCredential(); + leaseDatabase = await new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.LeaseEndpoint, credential) + .CreateDatabaseIfNotExistsAsync(_cosmosDbConfig.LeaseDatabaseId); + } } else { - leaseDatabase = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.LeaseConnection, clientOptions) - - .GetDatabase(_cosmosDbConfig.LeaseDatabaseId); + // maintain a single instance of CosmosClient per lifetime of the application. + if (_cosmosDbConfig.LeaseConnection == _cosmosDbConfig.Connection) + { + leaseDatabase = await cosmosClient.CreateDatabaseIfNotExistsAsync(_cosmosDbConfig.LeaseDatabaseId); + } + else + { + leaseDatabase = await new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.LeaseConnection) + .CreateDatabaseIfNotExistsAsync(_cosmosDbConfig.LeaseDatabaseId); + } } Container leaseContainer = await leaseDatabase @@ -59,19 +81,6 @@ public override async Task StartAsync(CancellationToken cancellationToken) string instanceName = $"Instance-{Dns.GetHostName()}"; - CosmosClient cosmosClient; - - if (string.IsNullOrEmpty(_cosmosDbConfig.Connection)) - { - var credential = new DefaultAzureCredential(); - - cosmosClient = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.Endpoint, credential); - } - else - { - cosmosClient = new Microsoft.Azure.Cosmos.CosmosClient(_cosmosDbConfig.Connection); - } - _processor = cosmosClient .GetContainer(_cosmosDbConfig.DatabaseId, _cosmosDbConfig.ContainerId) .GetChangeFeedProcessorBuilder(_cosmosDbConfig.ProcessorName, ProcessOrdersAsync) diff --git a/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml b/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml index 14ab346..6559ccb 100644 --- a/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml +++ b/src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml @@ -13,10 +13,10 @@ spec: - type: external metadata: scalerAddress: cosmosdb-scaler.default:4050 - endpoint: + endpoint: databaseId: StoreDatabase containerId: OrderContainer - leaseEndpoint: + leaseEndpoint: leaseDatabaseId: StoreDatabase leaseContainerId: OrderProcessorLeases processorName: OrderProcessor diff --git a/src/Scaler.Demo/README.md b/src/Scaler.Demo/README.md index ad8779b..22efcd7 100644 --- a/src/Scaler.Demo/README.md +++ b/src/Scaler.Demo/README.md @@ -17,6 +17,8 @@ We will later deploy the order-processor application to Kubernetes cluster and u ## Testing sample application locally on Docker +**Note** For simplicity, we will use the connection string method to connect locally (using docker) to Azure Cosmos DB. Once deployed to the AKS cluster the applications will use Managed Identity for Connection. Managed Identity is more secure as there is no risk of accidentally leaking the connection string. + 1. Open command prompt or shell and change to the root directory of the cloned repo. 1. Run the below commands to build the Docker container images for order-generator and order-processor applications. @@ -111,7 +113,7 @@ We will later deploy the order-processor application to Kubernetes cluster and u # docker push /cosmosdb-scaler:latest ``` -1. Update your Docker ID in the image path in manifest file `src/Scaler/deploy.yaml` and apply it to deploy the external scaler application. +1. Update your Docker ID in the image path in manifest file `src/Scaler/deploy.yaml` and apply it to deploy the external scaler application. ```text kubectl apply --filename=src/Scaler/deploy.yaml @@ -154,6 +156,7 @@ We will later deploy the order-processor application to Kubernetes cluster and u ```text kubectl apply --filename=src/Scaler.Demo/OrderProcessor/deploy-scaledobject.yaml ``` + > **Note:** In case you are not using identity-based authentication in Cosmos DB then use `src/Scaler/deploy-scaledobject-cs.yaml` in the above step. > **Note** Ideally, we would have created `TriggerAuthentication` resource that would enable sharing of the connection strings as secrets between the scaled object and the target application. However, this is not possible since at the moment, the triggers of `external` type do not support referencing a `TriggerAuthentication` resource ([link](https://keda.sh/docs/scalers/external/#authentication-parameters)). diff --git a/src/Scaler.Tests/CosmosDbScalerServiceTests.cs b/src/Scaler.Tests/CosmosDbScalerServiceTests.cs index 8ed3cb2..b800c30 100644 --- a/src/Scaler.Tests/CosmosDbScalerServiceTests.cs +++ b/src/Scaler.Tests/CosmosDbScalerServiceTests.cs @@ -19,9 +19,11 @@ public CosmosDbScalerServiceTests() [Theory] [InlineData("endpoint")] + [InlineData("connection")] [InlineData("databaseId")] [InlineData("containerId")] [InlineData("leaseEndpoint")] + [InlineData("leaseConnection")] [InlineData("leaseDatabaseId")] [InlineData("leaseContainerId")] [InlineData("processorName")] @@ -51,9 +53,11 @@ public async Task IsActive_ReturnsFalseOnNonZeroPartitions(long partitionCount) [Theory] [InlineData("endpoint")] + [InlineData("connection")] [InlineData("databaseId")] [InlineData("containerId")] [InlineData("leaseEndpoint")] + [InlineData("leaseConnection")] [InlineData("leaseDatabaseId")] [InlineData("leaseContainerId")] [InlineData("processorName")] @@ -100,9 +104,11 @@ public async Task GetMetrics_ReturnsSameMetricNameIfPassed(string requestMetricN [Theory] [InlineData("endpoint")] + [InlineData("connection")] [InlineData("databaseId")] [InlineData("containerId")] [InlineData("leaseEndpoint")] + [InlineData("leaseConnection")] [InlineData("leaseDatabaseId")] [InlineData("leaseContainerId")] [InlineData("processorName")] @@ -145,6 +151,7 @@ public async Task GetMetricSpec_ReturnsNormalizedMetricName() { ScaledObjectRef request = GetScaledObjectRef(); request.ScalerMetadata["leaseEndpoint"] = "https://example.com:443/"; + request.ScalerMetadata["leaseConnection"] = "https://example2.com:443/;AccountKey=ZHVtbXkx\\"; request.ScalerMetadata["leaseDatabaseId"] = "Dummy.Lease.Database.Id"; request.ScalerMetadata["leaseContainerId"] = "Dummy:Lease:Container:Id"; request.ScalerMetadata["processorName"] = "Dummy%Processor%Name"; @@ -195,9 +202,11 @@ private static ScaledObjectRef GetScaledObjectRef() MapField scalerMetadata = scaledObjectRef.ScalerMetadata; scalerMetadata["endpoint"] = "https://example1.com:443/"; + scalerMetadata["connection"] = "https://example1.com:443/;AccountKey=ZHVtbXkx\\"; scalerMetadata["databaseId"] = "dummy-database-id"; scalerMetadata["containerId"] = "dummy-container-id"; scalerMetadata["leaseEndpoint"] = "https://example2.com:443/"; + scalerMetadata["leaseConnection"] = "https://example2.com:443/;AccountKey=ZHVtbXkx\\"; scalerMetadata["leaseDatabaseId"] = "dummy-lease-database-id"; scalerMetadata["leaseContainerId"] = "dummy-lease-container-id"; scalerMetadata["processorName"] = "dummy-processor-name"; diff --git a/src/Scaler/Services/CosmosDbFactory.cs b/src/Scaler/Services/CosmosDbFactory.cs index ffd5c4e..58095eb 100644 --- a/src/Scaler/Services/CosmosDbFactory.cs +++ b/src/Scaler/Services/CosmosDbFactory.cs @@ -10,18 +10,25 @@ internal sealed class CosmosDbFactory // maintain a single instance of CosmosClient per lifetime of the application. private readonly ConcurrentDictionary _cosmosClientCache = new(); - public CosmosClient GetCosmosClient(string endpoint) + public CosmosClient GetCosmosClient(string endpoint, bool useCredetials) { - return _cosmosClientCache.GetOrAdd(endpoint, CreateCosmosClient); + return _cosmosClientCache.GetOrAdd(endpoint, ep => CreateCosmosClient(ep, useCredetials)); } //private CosmosClient CreateCosmosClient(string connection) - private CosmosClient CreateCosmosClient(string endpoint) + private CosmosClient CreateCosmosClient(string endpoint_OR_connection, bool useCredentials) { + //use connection string or credentials + if (useCredentials) + { + var credential = new DefaultAzureCredential(); + return new Microsoft.Azure.Cosmos.CosmosClient(endpoint_OR_connection, credential, new CosmosClientOptions { ConnectionMode = ConnectionMode.Gateway, ApplicationName = "keda-external-azure-cosmos-db" }); + } + else + { + return new Microsoft.Azure.Cosmos.CosmosClient(endpoint_OR_connection, new CosmosClientOptions { ConnectionMode = ConnectionMode.Gateway, ApplicationName = "keda-external-azure-cosmos-db" }); + } - var credential = new DefaultAzureCredential(); - return new Microsoft.Azure.Cosmos.CosmosClient(endpoint, credential, new CosmosClientOptions { ConnectionMode = ConnectionMode.Gateway }); - } } diff --git a/src/Scaler/Services/CosmosDbMetricProvider.cs b/src/Scaler/Services/CosmosDbMetricProvider.cs index f8408c0..4c3f3fc 100644 --- a/src/Scaler/Services/CosmosDbMetricProvider.cs +++ b/src/Scaler/Services/CosmosDbMetricProvider.cs @@ -20,9 +20,10 @@ internal sealed class CosmosDbMetricProvider : ICosmosDbMetricProvider private readonly CosmosDbFactory _factory; private readonly ILogger _logger; - static Meter s_meter = new Meter("OrderProcessor.CFStore", "1.0.0"); + private static Meter s_meter = new Meter("OrderProcessor.CFStore", "1.0.0"); private static Counter s_CFRecordsReceived = s_meter.CreateCounter("RecordsReceived"); private static Counter s_CFProcessorCount = s_meter.CreateCounter("ProcessorCount"); + public CosmosDbMetricProvider(CosmosDbFactory factory, ILogger logger) { _factory = factory ?? throw new ArgumentNullException(nameof(factory)); @@ -38,19 +39,46 @@ public async Task GetPartitionCountAsync(ScalerMetadata scalerMetadata) try { - var credential = new DefaultAzureCredential(); - var cosmosClient = new CosmosClient(scalerMetadata.Endpoint, credential); + bool useCredentials_lease = false; + bool useCredentials = false; + string endpoint_or_connection_lease; + string endpoint_or_connection; - Container leaseContainer = cosmosClient.GetContainer(scalerMetadata.LeaseDatabaseId, scalerMetadata.LeaseContainerId); - Container monitoredContainer = cosmosClient.GetContainer(scalerMetadata.DatabaseId, scalerMetadata.ContainerId); + //use connection string or credentials for Lease + if (!String.IsNullOrEmpty(scalerMetadata.LeaseConnection)) + { + endpoint_or_connection_lease = scalerMetadata.LeaseConnection; + useCredentials_lease = false; + } + else + { + endpoint_or_connection_lease = scalerMetadata.LeaseEndpoint; + useCredentials_lease = true; + } + Container leaseContainer = _factory + .GetCosmosClient(endpoint_or_connection_lease, useCredentials_lease) + .GetContainer(scalerMetadata.LeaseDatabaseId, scalerMetadata.LeaseContainerId); - ChangeFeedEstimator changeFeedEstimator = monitoredContainer.GetChangeFeedEstimator("SalesOrderChangeFeed", leaseContainer); + //use connection string or credentials for Monitored + if (!String.IsNullOrEmpty(scalerMetadata.Connection)) + { + endpoint_or_connection = scalerMetadata.Connection; + useCredentials = false; + } + else + { + endpoint_or_connection = scalerMetadata.Endpoint; + useCredentials = true; + } + ChangeFeedEstimator estimator = _factory + .GetCosmosClient(endpoint_or_connection, useCredentials) + .GetContainer(scalerMetadata.DatabaseId, scalerMetadata.ContainerId) + .GetChangeFeedEstimator(scalerMetadata.ProcessorName, leaseContainer); - using FeedIterator estimatorIterator = changeFeedEstimator.GetCurrentStateIterator(); + using FeedIterator estimatorIterator = estimator.GetCurrentStateIterator(); int partitionCount = 0; - long lagCount=0; while (estimatorIterator.HasMoreResults) {