An application is a container unit that is part of a Project within an Environment. You can deploy multiple applications within the same environment, and they can communicate with each other and connect to databases.
Qovery pulls your code from a Git repository, builds the application, and deploys it to your Kubernetes cluster.Supported Providers: GitHub, GitLab, Bitbucket
Qovery offers three autoscaling modes to match your application’s needs:
Not recommended for production workloads. A single instance has no redundancy—if the pod fails or the node undergoes maintenance, your application will be temporarily unavailable.For high availability:
Set minimum instances to 2 if your app can run on 1 instance
Set minimum instances to 3 or higher if your app requires multiple instances to handle necessary traffic
This ensures redundancy during node maintenance or pod failures
Note: KEDA (Event-Driven) autoscaling supports setting minimum instances to 0 for scale-to-zero capability on sporadic workloads.
Scale your application based on external event sources like message queues, streams, databases, and more.
AWS and GCP clusters only - KEDA autoscaling is currently available for applications deployed on AWS and GCP.
Prerequisite: Enable KEDA at Cluster LevelBefore using event-driven autoscaling, KEDA must be enabled on your cluster:
Navigate to your cluster settings
Go to the Add-ons tab
Enable the KEDA option
Redeploy your cluster for the changes to take effect
What is KEDA?KEDA (Kubernetes Event-Driven Autoscaler) extends Kubernetes autoscaling capabilities by scaling based on external metrics and events rather than just CPU/memory.Use Cases:
Direct migration from HPA to KEDA is blocked. The reason is a Kubernetes conflict: both HPA and KEDA’s ScaledObject target the same Deployment replica count simultaneously, causing unpredictable scaling behavior.The required migration path is HPA → No Scaling → KEDA:
Switch your application to No autoscaling (fixed instances) mode and save
Redeploy — this removes the HPA resource from the cluster
Switch to KEDA (Event-Driven) mode and configure your scalers
Minimum instances: Baseline number of pods (minimum: 0 for scale-to-zero)
Maximum instances: Upper scaling limit
Optional Settings:
Polling interval: How often KEDA checks the event source while the application runs 0 instances (default: 30 seconds)
Cooldown period: Wait time after the last event before scaling back to 0 (default: 300 seconds)
Both settings only apply to scaling between 0 and 1 instance. Between 1 and the maximum, KEDA feeds its metrics to a Kubernetes HPA, which applies its own timing. See pollingInterval and cooldownPeriod in the KEDA reference.
Scale-to-Zero: KEDA supports setting minimum instances to 0, allowing your application to scale down completely when there are no events. When events are detected, KEDA automatically scales up from 0 to handle the workload. This is ideal for cost optimization on sporadic workloads.
Multiple scalers behavior: If you configure multiple scalers, KEDA uses the scaler that calculates the highest target number of instances. For example, if Scaler A monitors a queue with 15 messages and calculates 15 target instances (1 message per instance), and Scaler B monitors a queue with 50 messages and calculates 5 target instances (10 messages per instance), KEDA scales to 15 instances (the higher target).
Each scaler monitors a specific event source. You can add multiple scalers to respond to different metrics.
Built-in scalers only: Qovery currently supports KEDA’s built-in scalers. External scalers are not supported at this time.
For Each Scaler:
Scaler Type: The event source type (e.g., aws-sqs-queue, rabbitmq, kafka, prometheus)
Scaler YAML Configuration: Source-specific parameters in YAML format
Trigger Authentication YAML (Optional): Authentication credentials if required
Scaler YAML Configuration accepts the following fields:
metadata - Scaler-specific parameters (required). Each scaler type has different metadata fields. See the KEDA Scalers documentation for available parameters per scaler type.
metricType - Metric target type: Value, AverageValue, or Utilization (optional)
useCachedMetrics - Whether to use cached metrics (optional, boolean)
KEDA supports multiple authentication methods. Each scaler type supports a subset of these methods.Common Authentication Methods:1. podIdentity - Use IAM roles (AWS) or managed identities (Azure)
podIdentity: provider: aws # or azure identityOwner: workload # inherit from application service account # OR roleArn: arn:aws:iam::123456789012:role/MyRole # specify role directly
2. secretTargetRef - Reference Qovery environment variables or secrets
secretTargetRef: - parameter: connectionString # Parameter name defined by the scaler key: qovery.env.MY_CONNECTION_STRING # Qovery variable reference
Use qovery.env.VARIABLE_NAME to reference environment variables or secrets defined in your Qovery application.
Replace <account-id>, <region>, <oidc-id>, <your-namespace>, and <service-account-name> with your specific values. The key addition is the keda-operator service account in the trust relationship.
With identityOwner: workload, KEDA automatically inherits the IAM role from your application’s service account. This requires the trust relationship configuration from Step 3.
Replace <account-id>, <region>, and <oidc-id> with your AWS account ID, EKS region, and OIDC provider ID. You can find the OIDC provider URL in your EKS cluster details under the Configuration tab.
After completing the AWS configuration steps above, configure the KEDA scaler in Qovery with the IAM role ARN you created.Scaler YAML (paste in “Configuration YAML” field):
Scale your application based on Redis list length or stream lag.Scaler Types:
redis - For Redis lists
redis-streams - For Redis streams
Authentication:
Redis does NOT use IAM authentication. You can provide credentials directly in the configuration or reference Qovery environment variables/secrets.Scaler YAML Example (paste in “Configuration YAML” field):
Scale your application based on RabbitMQ queue depth.Authentication:
RabbitMQ does NOT use IAM authentication. You can provide credentials directly in the configuration or reference Qovery environment variables/secrets.Scaler YAML Example (paste in “Configuration YAML” field):
You can reference Qovery environment variables or secrets using qovery.env.VARIABLE_NAME, or provide the connection string directly in the YAML configuration. The RabbitMQ URL format is: amqp://user:password@rabbitmq.example.com:5672/vhost
Configuration Parameters:
protocol - Connection protocol: amqp or http (optional, default: amqp)
queueName - Name of the RabbitMQ queue to monitor
mode - Scaling mode: QueueLength (default) or MessageRate
Testing your KEDA configuration: Start with a low queueLength value and a small maxInstances to test scaling behavior. Monitor your application logs and KEDA operator logs to verify scaling triggers work as expected.
For HTTP and gRPC protocols, the external port is set to 443 by default with
automatic TLS.
Connection Timeouts: Connections on public ports are automatically closed
after 60 seconds by default. Configure custom timeouts in advanced settings
for long-lived connections.
TCP/UDP Ports: Exposing TCP/UDP ports publicly requires provisioning a
dedicated load balancer, which takes approximately 15 minutes and incurs
additional cloud provider costs.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Qovery","colors":{"primary":"#642DFF","light":"#D8CBFF","dark":"#151B2B"},"logo":{"light":"https://mintcdn.com/qovery/Nvnl0g5BHzA0XQmy/images/logos/qovery-logo-black.svg?fit=max\u0026auto=format\u0026n=Nvnl0g5BHzA0XQmy\u0026q=85\u0026s=fd1a292f8293eb3cf8763f75af6ee9d4","dark":"https://mintcdn.com/qovery/Nvnl0g5BHzA0XQmy/images/logos/qovery-logo-white.svg?fit=max\u0026auto=format\u0026n=Nvnl0g5BHzA0XQmy\u0026q=85\u0026s=93dca33bf2171e9faadba09595bdf80b"},"favicon":"https://mintcdn.com/qovery/ppnp94_itg1qC8g_/favicon.svg?fit=max\u0026auto=format\u0026n=ppnp94_itg1qC8g_\u0026q=85\u0026s=e0709ea668cbf2f32d1159fa6c2b136d","navbar":{"links":[{"icon":"github","href":"https://github.com/Qovery","label":"GitHub"}],"primary":{"type":"button","label":"Console","href":"https://console.qovery.com"}},"footer":{"links":[{"items":[{"label":"Pricing","href":"https://www.qovery.com/pricing"},{"label":"Changelog","href":"https://www.qovery.com/changelog"},{"label":"Roadmap","href":"https://roadmap.qovery.com/en/roadmap"},{"label":"Case Studies","href":"https://www.qovery.com/case-studies"}]},{"items":[{"label":"Documentation","href":"https://qovery.com/docs"},{"label":"Blog","href":"https://www.qovery.com/blog"},{"label":"GitHub","href":"https://github.com/Qovery"},{"label":"Changelog","href":"https://www.qovery.com/changelog"},{"label":"Replibyte","href":"https://www.replibyte.com"}]},{"items":[{"label":"Contact","href":"https://www.qovery.com/contact"},{"label":"Security","href":"https://trust.qovery.com"},{"label":"Terms","href":"https://www.qovery.com/terms-of-service"},{"label":"Privacy Policy","href":"https://www.qovery.com/private-policy"}]}]},"integrations":{"posthog":{"apiKey":"phc_IgdG1K2GveDUte1gJ6hlwNbFHCv9nViWETUyLMU7ciq","apiHost":"https://e.qovery.com","sessionRecording":true}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qovery","hasAudioNarration":false,"actualSubdomain":"qovery","customDomains":["www.qovery.com"],"gitSource":{"type":"github","owner":"qovery","repo":"documentation","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aedd5a17d3fe39d4f38ac9a","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"API Reference","count":575},{"language":"default","tag":"Configuration","count":88},{"language":"default","tag":"Getting Started","count":69},{"language":"default","tag":"Clusters","count":38},{"language":"default","tag":"CLI","count":33},{"language":"default","tag":"Commands","count":31},{"language":"default","tag":"Cloud Provider Credentials","count":25},{"language":"default","tag":"Organization Main Calls","count":22},{"language":"default","tag":"Tutorials","count":21},{"language":"default","tag":"Advanced Tutorials","count":18}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".logo img,[class*=\"Logo\"] img,header img[alt*=\"logo\"i]{max-height:40px!important;height:40px!important;width:auto!important}header nav a,header a[href],[class*=\"topbar\"] a{color:inherit!important;text-decoration:none!important}#topbar-cta-button a span.bg-primary-dark{background-color:#642dff!important}html[class*=\"dark\"] #topbar-cta-button a span.bg-primary-dark,html[data-theme=\"dark\"] #topbar-cta-button a span.bg-primary-dark,.dark #topbar-cta-button a span.bg-primary-dark{background-color:#d8cbff!important}html[class*=\"dark\"] #topbar-cta-button a span.text-white,html[data-theme=\"dark\"] #topbar-cta-button a span.text-white,.dark #topbar-cta-button a span.text-white{color:#151b2b!important}html[class*=\"dark\"] #topbar-cta-button a svg,html[data-theme=\"dark\"] #topbar-cta-button a svg,.dark #topbar-cta-button a svg{color:#151b2b!important}#topbar-cta-button a div span.text-white::before{content:\"\"!important;display:inline-block!important;width:16px!important;height:16px!important;margin-right:6px!important;background-image:url('data:image/svg+xml,\u003csvg width=\"84\" height=\"96\" viewBox=\"0 0 84 96\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\u003cpath d=\"M80.3554 21.4078L45.5514 1.31333C43.3963 0.0687351 40.7428 0.0687351 38.5906 1.31333L3.78655 21.4078C1.63427 22.6496 0.306152 24.9494 0.306152 27.4358V67.6247C0.306152 70.1111 1.63149 72.4082 3.78655 73.6528L42.071 95.7575V73.6528C42.071 72.4082 42.7336 71.261 43.8112 70.6373L62.9534 59.5864V83.6986L80.3554 73.6528C82.5104 72.4082 83.8358 70.1111 83.8358 67.6247V27.4358C83.8358 24.9494 82.5104 22.6524 80.3554 21.4078ZM40.3308 48.5354L21.1886 59.5864V37.4816C21.1886 36.2371 21.8512 35.0899 22.9288 34.4662L40.3308 24.4204C41.4083 23.7995 42.7336 23.7995 43.8112 24.4204L61.2132 34.4662C62.2907 35.0871 62.9534 36.2371 62.9534 37.4816V59.5864L43.8112 48.5354C42.7336 47.9145 41.4083 47.9145 40.3308 48.5354Z\" fill=\"white\"/>\u003c/svg>')!important;background-size:contain!important;background-repeat:no-repeat!important;background-position:center!important;vertical-align:text-bottom!important;transform:translateY(-1px)!important}html[class*=\"dark\"] #topbar-cta-button a div span.text-white::before,html[data-theme=\"dark\"] #topbar-cta-button a div span.text-white::before,.dark #topbar-cta-button a div span.text-white::before{background-image:url('data:image/svg+xml,\u003csvg width=\"84\" height=\"96\" viewBox=\"0 0 84 96\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\u003cpath d=\"M80.3554 21.4078L45.5514 1.31333C43.3963 0.0687351 40.7428 0.0687351 38.5906 1.31333L3.78655 21.4078C1.63427 22.6496 0.306152 24.9494 0.306152 27.4358V67.6247C0.306152 70.1111 1.63149 72.4082 3.78655 73.6528L42.071 95.7575V73.6528C42.071 72.4082 42.7336 71.261 43.8112 70.6373L62.9534 59.5864V83.6986L80.3554 73.6528C82.5104 72.4082 83.8358 70.1111 83.8358 67.6247V27.4358C83.8358 24.9494 82.5104 22.6524 80.3554 21.4078ZM40.3308 48.5354L21.1886 59.5864V37.4816C21.1886 36.2371 21.8512 35.0899 22.9288 34.4662L40.3308 24.4204C41.4083 23.7995 42.7336 23.7995 43.8112 24.4204L61.2132 34.4662C62.2907 35.0871 62.9534 36.2371 62.9534 37.4816V59.5864L43.8112 48.5354C42.7336 47.9145 41.4083 47.9145 40.3308 48.5354Z\" fill=\"%23151B2B\"/>\u003c/svg>')!important}[data-page-mode=\"custom\"] main,[data-page-mode=\"custom\"] article,html[data-page-mode=\"custom\"] main>div,html[data-page-mode=\"custom\"] article>div{max-width:1280px!important;margin-left:auto!important;margin-right:auto!important;padding-left:2rem!important;padding-right:2rem!important;box-sizing:border-box!important}.card-icon img,.card img[src*=\"/logos/\"]{max-width:24px!important;max-height:24px!important;width:24px!important;height:24px!important;background:transparent!important}[class*=\"CardIcon\"] img,[class*=\"card-icon\"] img{max-width:24px!important;max-height:24px!important;object-fit:contain!important;background:transparent!important}img[src*=\"/scaleway-icon\"],[class*=\"Card\"] img[src*=\"/scaleway-icon\"]{max-width:24px!important;max-height:24px!important;width:auto!important;height:24px!important;object-fit:contain!important}html[class*=\"dark\"] .card-icon,html[data-theme=\"dark\"] .card-icon,html[class*=\"dark\"] [class*=\"CardIcon\"],html[data-theme=\"dark\"] [class*=\"CardIcon\"]{background:transparent!important;background-color:transparent!important}[class*=\"Card\"] img[src*=\"logo\"],.card img[src*=\"logo\"],img[src*=\"/logos/\"]{background:transparent!important;mix-blend-mode:normal!important}.card{display:flex!important;flex-direction:column!important;align-items:flex-start!important}.card-icon{margin-bottom:12px!important}html[class*=\"dark\"] .light-mode-only,html[data-theme=\"dark\"] .light-mode-only{display:none!important}html[class*=\"light\"] .dark-mode-only,html[data-theme=\"light\"] .dark-mode-only,html:not([class*=\"dark\"]):not([data-theme=\"dark\"]) .dark-mode-only{display:none!important}.badge-icon{display:inline-block;height:20px;max-height:20px;width:auto;margin-left:8px;vertical-align:middle;object-fit:contain}img[src*=\"/scaleway-icon\"].badge-icon,img[alt=\"Scaleway\"].badge-icon{height:20px!important;max-height:20px!important;width:auto!important;object-fit:contain!important}.raci-legend{display:flex;gap:1.5rem;margin-bottom:1.5rem;flex-wrap:wrap;padding:1rem;background-color:rgba(100, 45, 255, 0.05);border-radius:8px;border-left:4px solid #642dff}.raci-legend div{font-size:0.9rem}.role-r-text{color:#dc2626;font-weight:600}.role-a-text{color:#2563eb;font-weight:600}.role-c-text{color:#16a34a;font-weight:600}.role-i-text{color:#9333ea;font-weight:600}.raci-table-container{overflow-x:auto;margin:2rem 0;width:100%}table.raci-matrix{width:100%;min-width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}table.raci-matrix .col-component{width:50%}table.raci-matrix .col-provider,table.raci-matrix .col-qovery,table.raci-matrix .col-customer{width:16.66%}table.raci-matrix th{background-color:#642dff;color:white;font-weight:600;padding:12px;text-align:center;border-bottom:2px solid #5527cc}table.raci-matrix th:first-child{text-align:left}table.raci-matrix tbody tr:hover{background-color:rgba(100, 45, 255, 0.05)}table.raci-matrix tr.layer-header td{background-color:#f3f4f6;font-weight:700;font-size:0.95rem;padding:10px 12px;color:#1f2937;border-top:2px solid #d1d5db;border-bottom:1px solid #d1d5db}table.raci-matrix td{padding:12px;border-bottom:1px solid #e5e7eb;text-align:center}table.raci-matrix td:first-child{text-align:left;font-weight:500}table.raci-matrix .role-ra{background-color:#fee2e2;color:#991b1b;font-weight:700}table.raci-matrix .role-r{background-color:#fef2f2;color:#dc2626;font-weight:600}table.raci-matrix .role-a{background-color:#dbeafe;color:#1e40af;font-weight:600}table.raci-matrix .role-c{background-color:#dcfce7;color:#15803d;font-weight:600}table.raci-matrix .role-i{background-color:#f3e8ff;color:#7c3aed;font-weight:600}table.raci-matrix .role-ci{background-color:#d1fae5;color:#065f46;font-weight:600}.vpc-tooltip-container{position:relative}.info-icon{display:inline-block;width:16px;height:16px;background-color:#642dff;color:white;border-radius:50%;text-align:center;font-size:12px;font-weight:bold;margin-left:6px;cursor:help}.vpc-tooltip{display:none;position:absolute;bottom:100%;left:0;background-color:#1f2937;color:white;padding:12px;border-radius:6px;width:300px;font-size:0.85rem;line-height:1.5;z-index:1000;box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1)}.vpc-tooltip-container:hover .vpc-tooltip{display:block}.vpc-tooltip p{margin:0 0 8px 0}.vpc-tooltip p:last-child{margin-bottom:0}html[data-theme=\"dark\"] table.raci-matrix{border-color:#374151}html[data-theme=\"dark\"] table.raci-matrix th{background-color:#642dff;border-bottom-color:#5527cc}html[data-theme=\"dark\"] table.raci-matrix td{border-bottom-color:#374151}html[data-theme=\"dark\"] table.raci-matrix tr.layer-header td{background-color:#1f2937;color:#f9fafb;border-top-color:#4b5563;border-bottom-color:#4b5563}html[data-theme=\"dark\"] .raci-legend{background-color:rgba(100, 45, 255, 0.1)}.badge-icon-scaleway-light{display:inline-block;height:20px;max-height:20px;width:20px;max-width:20px;margin-left:8px;vertical-align:middle;object-fit:contain}.badge-icon-scaleway-dark{display:none;height:20px;max-height:20px;width:20px;max-width:20px;margin-left:8px;vertical-align:middle;object-fit:contain}html[class*=\"dark\"] .badge-icon-scaleway-light,html[data-theme=\"dark\"] .badge-icon-scaleway-light{display:none}html[class*=\"dark\"] .badge-icon-scaleway-dark,html[data-theme=\"dark\"] .badge-icon-scaleway-dark{display:inline-block}.badge-aws,.badge-gcp,.badge-azure,.badge-scw,.badge-app,.badge-container,.badge-cronjob,.badge-job,.badge-helm,.badge-new{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:600;color:white;margin-right:8px;margin-bottom:4px;white-space:nowrap;line-height:1.4;vertical-align:middle}.badge-aws{background-color:#ff9900}.badge-gcp{background-color:#ea4335}.badge-azure{background-color:#0089d6}.badge-scw{background-color:#4f0599}.badge-app{background-color:#10b981}.badge-container{background-color:#3b82f6}.badge-cronjob{background-color:#f59e0b}.badge-job{background-color:#8b5cf6}.badge-helm{background-color:#0f1689}.badge-new{background-color:#642DFF}.badge-terraform{background-color:#4040b2}.helm-icon{display:inline-block;height:20px;width:auto;margin-right:8px;margin-bottom:4px;vertical-align:middle}.terraform-icon{display:inline-block;height:20px;width:auto;margin-right:8px;margin-bottom:4px;vertical-align:middle}img[src*=\"/terraform-icon.svg\"],img[src*=\"/helm-icon.svg\"],img[src*=\"/aws-icon.svg\"],img[src*=\"/github-icon.svg\"]{}html[class*=\"dark\"] img[src*=\"/terraform-icon.svg\"],html[data-theme=\"dark\"] img[src*=\"/terraform-icon.svg\"],.dark img[src*=\"/terraform-icon.svg\"]{filter:brightness(0) saturate(100%) invert(92%) sepia(8%) saturate(1299%)\n hue-rotate(202deg) brightness(103%) contrast(100%)}html[class*=\"dark\"] img[src*=\"/helm-icon.svg\"],html[data-theme=\"dark\"] img[src*=\"/helm-icon.svg\"],.dark img[src*=\"/helm-icon.svg\"],html[class*=\"dark\"] img[src*=\"/helm-icon-light.svg\"],html[data-theme=\"dark\"] img[src*=\"/helm-icon-light.svg\"],.dark img[src*=\"/helm-icon-light.svg\"]{filter:brightness(0) invert(1)}html[class*=\"dark\"] img[src*=\"/aws-icon.svg\"],html[data-theme=\"dark\"] img[src*=\"/aws-icon.svg\"],.dark img[src*=\"/aws-icon.svg\"]{filter:brightness(0) invert(1)}html[class*=\"dark\"] img[src*=\"/github-icon.svg\"],html[data-theme=\"dark\"] img[src*=\"/github-icon.svg\"],.dark img[src*=\"/github-icon.svg\"]{filter:brightness(0) invert(1)}html[class*=\"dark\"] img[src*=\"/scaleway-icon-light.svg\"],html[data-theme=\"dark\"] img[src*=\"/scaleway-icon-light.svg\"],.dark img[src*=\"/scaleway-icon-light.svg\"]{filter:brightness(0) saturate(100%) invert(92%) sepia(8%) saturate(1299%)\n hue-rotate(202deg) brightness(103%) contrast(100%)}html[class*=\"dark\"] img[src*=\"/logos/provision-logo-only.svg\"],html[data-theme=\"dark\"] img[src*=\"/logos/provision-logo-only.svg\"],.dark img[src*=\"/logos/provision-logo-only.svg\"]{filter:brightness(0) saturate(100%) invert(92%) sepia(8%) saturate(1299%)\n hue-rotate(202deg) brightness(103%) contrast(100%)}html[class*=\"dark\"] img[src*=\"/logos/deploy-logo-only.svg\"],html[data-theme=\"dark\"] img[src*=\"/logos/deploy-logo-only.svg\"],.dark img[src*=\"/logos/deploy-logo-only.svg\"]{filter:brightness(0) saturate(100%) invert(92%) sepia(8%) saturate(1299%)\n hue-rotate(202deg) brightness(103%) contrast(100%)}html[class*=\"dark\"] img[src*=\"/logos/observe-logo-only.svg\"],html[data-theme=\"dark\"] img[src*=\"/logos/observe-logo-only.svg\"],.dark img[src*=\"/logos/observe-logo-only.svg\"]{filter:brightness(0) saturate(100%) invert(92%) sepia(8%) saturate(1299%)\n hue-rotate(202deg) brightness(103%) contrast(100%)}html[class*=\"dark\"] img[src*=\"/logos/optimize-logo-only.svg\"],html[data-theme=\"dark\"] img[src*=\"/logos/optimize-logo-only.svg\"],.dark img[src*=\"/logos/optimize-logo-only.svg\"]{filter:brightness(0) saturate(100%) invert(92%) sepia(8%) saturate(1299%)\n hue-rotate(202deg) brightness(103%) contrast(100%)}html[class*=\"dark\"] img[src*=\"/logos/secure-logo-only.svg\"],html[data-theme=\"dark\"] img[src*=\"/logos/secure-logo-only.svg\"],.dark img[src*=\"/logos/secure-logo-only.svg\"]{filter:brightness(0) saturate(100%) invert(92%) sepia(8%) saturate(1299%)\n hue-rotate(202deg) brightness(103%) contrast(100%)}html[class*=\"dark\"] img[src*=\"/ai-tools/cursor.svg\"],html[data-theme=\"dark\"] img[src*=\"/ai-tools/cursor.svg\"],html[class*=\"dark\"] img[src*=\"/ai-tools/githubcopilot.svg\"],html[data-theme=\"dark\"] img[src*=\"/ai-tools/githubcopilot.svg\"],html[class*=\"dark\"] img[src*=\"/ai-tools/amp.svg\"],html[data-theme=\"dark\"] img[src*=\"/ai-tools/amp.svg\"],html[class*=\"dark\"] img[src*=\"/ai-tools/openai.svg\"],html[data-theme=\"dark\"] img[src*=\"/ai-tools/openai.svg\"],html[class*=\"dark\"] img[src*=\"/ai-tools/goose.png\"],html[data-theme=\"dark\"] img[src*=\"/ai-tools/goose.png\"]{filter:brightness(0) invert(1)}.terminal-window{background:#0d1117;border-radius:10px;overflow:hidden;margin:16px 0 24px;box-shadow:0 4px 24px rgba(0, 0, 0, 0.25)}.terminal-bar{background:#161b22;padding:10px 16px;display:flex;align-items:center;border-bottom:1px solid #21262d}.terminal-dots{display:flex;gap:6px;margin-right:12px}.terminal-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}.terminal-dot-red{background:#ff5f57}.terminal-dot-yellow{background:#febc2e}.terminal-dot-green{background:#28c840}.terminal-title-bar{flex:1;text-align:center;color:#6e7681;font-size:12px;font-family:'Roboto Mono', monospace}.terminal-copy{background:transparent;border:none;color:#6e7681;cursor:pointer;padding:4px 6px;border-radius:4px;display:flex;align-items:center;transition:color 0.15s, background 0.15s;flex-shrink:0}.terminal-copy:hover{color:#e6edf3;background:rgba(255, 255, 255, 0.08)}.terminal-copy-success{color:#3fb950!important}.terminal-body{padding:20px 24px;font-family:'Roboto Mono', monospace;font-size:13px;line-height:1.8;color:#e6edf3}.terminal-prompt{display:block;margin:4px 0}.terminal-prompt::before{content:'$ ';color:#642DFF;font-weight:700}.terminal-output{display:block;color:#8b949e;padding-left:14px;margin:2px 0}.terminal-success{display:block;color:#3fb950;padding-left:14px;margin:2px 0}.terminal-sep{border:none;border-top:1px solid #21262d;margin:14px 0}@keyframes blink-cursor{0%,50%{opacity:1}51%,100%{opacity:0}}.terminal-cursor{display:inline-block;width:7px;height:13px;background:#e6edf3;animation:blink-cursor 1s step-end infinite;vertical-align:text-bottom;margin-left:2px}.skill-radio{position:absolute;opacity:0;pointer-events:none;width:0;height:0}.skills-grid{display:grid;grid-template-columns:repeat(4, 1fr);gap:8px;margin-bottom:16px}@media (max-width: 640px){.skills-grid{grid-template-columns:repeat(2, 1fr)}}.skill-card{padding:12px 14px;border:1px solid #e5e7eb;border-radius:8px;cursor:pointer;transition:border-color 0.15s, background 0.15s;display:flex;flex-direction:column;gap:3px;user-select:none}html.dark .skill-card,html[data-theme=\"dark\"] .skill-card{border-color:rgba(255, 255, 255, 0.1)}.skill-card:hover{border-color:rgba(100, 45, 255, 0.5);background:rgba(100, 45, 255, 0.05)}.skill-card-name{font-size:12px;font-weight:600;color:#111827;font-family:'Roboto Mono', monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}html.dark .skill-card-name,html[data-theme=\"dark\"] .skill-card-name{color:#e6edf3}.skill-card-desc{font-size:11px;color:#6b7280;line-height:1.35}html.dark .skill-card-desc,html[data-theme=\"dark\"] .skill-card-desc{color:#8b949e}#sk-onboard:checked~.skills-grid label[for=\"sk-onboard\"],#sk-deploy:checked~.skills-grid label[for=\"sk-deploy\"],#sk-troubleshoot:checked~.skills-grid label[for=\"sk-troubleshoot\"],#sk-optimize:checked~.skills-grid label[for=\"sk-optimize\"],#sk-speedup:checked~.skills-grid label[for=\"sk-speedup\"],#sk-preview:checked~.skills-grid label[for=\"sk-preview\"],#sk-builder-env:checked~.skills-grid label[for=\"sk-builder-env\"],#sk-builder-portal:checked~.skills-grid label[for=\"sk-builder-portal\"]{border-color:#642DFF;background:rgba(100, 45, 255, 0.1)}.skills-desc-wrap{padding:12px 14px;min-height:44px;font-size:13.5px;color:#374151;line-height:1.6;border-left:3px solid #642DFF;background:rgba(100, 45, 255, 0.04);border-radius:0 6px 6px 0;margin-bottom:12px}html.dark .skills-desc-wrap,html[data-theme=\"dark\"] .skills-desc-wrap{color:#c9d1d9;background:rgba(100, 45, 255, 0.08)}.sk-desc{display:none}#sk-onboard:checked~.skills-desc-wrap .sk-desc-onboard{display:block}#sk-deploy:checked~.skills-desc-wrap .sk-desc-deploy{display:block}#sk-troubleshoot:checked~.skills-desc-wrap .sk-desc-troubleshoot{display:block}#sk-optimize:checked~.skills-desc-wrap .sk-desc-optimize{display:block}#sk-speedup:checked~.skills-desc-wrap .sk-desc-speedup{display:block}#sk-preview:checked~.skills-desc-wrap .sk-desc-preview{display:block}#sk-builder-env:checked~.skills-desc-wrap .sk-desc-builder-env{display:block}#sk-builder-portal:checked~.skills-desc-wrap .sk-desc-builder-portal{display:block}.sk-prompt{display:none}#sk-onboard:checked~.skills-terminal .sk-prompt-onboard{display:block}#sk-deploy:checked~.skills-terminal .sk-prompt-deploy{display:block}#sk-troubleshoot:checked~.skills-terminal .sk-prompt-troubleshoot{display:block}#sk-optimize:checked~.skills-terminal .sk-prompt-optimize{display:block}#sk-speedup:checked~.skills-terminal .sk-prompt-speedup{display:block}#sk-preview:checked~.skills-terminal .sk-prompt-preview{display:block}#sk-builder-env:checked~.skills-terminal .sk-prompt-builder-env{display:block}#sk-builder-portal:checked~.skills-terminal .sk-prompt-builder-portal{display:block}.terminal-actions{display:flex;align-items:center;gap:6px;margin-left:auto}.terminal-open-cursor{display:flex;align-items:center;gap:5px;background:#2a2a2e;border:1px solid rgba(255, 255, 255, 0.1);color:#ffffff;font-size:11px;font-weight:500;padding:3px 8px;border-radius:5px;cursor:pointer;font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;transition:background 0.15s;white-space:nowrap;text-decoration:none;line-height:1}.terminal-open-cursor:hover{background:#3a3a3e}.compare-table{width:100%;border-collapse:collapse;font-size:14px;margin:16px 0}.compare-table thead th{padding:8px 16px 12px;text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:#6b7280;border-bottom:1px solid #e5e7eb}html.dark .compare-table thead th,html[data-theme=\"dark\"] .compare-table thead th{color:#6e7681;border-bottom-color:#21262d}.compare-table thead th.col-featured{color:#642DFF!important}.compare-table tbody td{padding:12px 16px;border-bottom:1px solid #f3f4f6;font-size:13.5px;vertical-align:middle;color:#374151}html.dark .compare-table tbody td,html[data-theme=\"dark\"] .compare-table tbody td{border-bottom-color:rgba(255,255,255,0.06);color:#c9d1d9}.compare-table tbody td:first-child{font-weight:600;color:#111827}html.dark .compare-table tbody td:first-child,html[data-theme=\"dark\"] .compare-table tbody td:first-child{color:#e6edf3}.compare-table tbody td.col-featured{background:rgba(100, 45, 255, 0.05)}html.dark .compare-table tbody td.col-featured,html[data-theme=\"dark\"] .compare-table tbody td.col-featured{background:rgba(100, 45, 255, 0.09)}.cmp-yes{color:#16a34a;font-weight:500}.cmp-no{color:#9ca3af}.cmp-auto{color:#7c3aed;font-weight:500}html.dark .cmp-yes{color:#3fb950}html.dark .cmp-no,html[data-theme=\"dark\"] .cmp-no{color:#6e7681}html.dark .cmp-auto,html[data-theme=\"dark\"] .cmp-auto{color:#a78bfa}.ai-section{background:linear-gradient(135deg, rgba(100, 45, 255, 0.09) 0%, rgba(100, 45, 255, 0.03) 100%);border:1px solid rgba(100, 45, 255, 0.22);border-radius:16px;padding:28px 28px 20px;margin:8px 0 24px}.ai-section h3{margin-top:0!important}html[class*=\"dark\"] .ai-section,html[data-theme=\"dark\"] .ai-section{background:linear-gradient(135deg, rgba(100, 45, 255, 0.18) 0%, rgba(100, 45, 255, 0.06) 100%);border-color:rgba(100, 45, 255, 0.38)}article>h1:first-of-type,main>h1:first-of-type,[class*=\"Content\"]>h1:first-of-type{display:none!important}footer,[class*=\"footer\"],[class*=\"Footer\"]{margin-left:0!important;padding-left:0!important}@media (min-width: 768px){footer,[class*=\"footer\"],[class*=\"Footer\"]{position:relative!important;z-index:1!important}footer>div,[class*=\"footer\"]>div,[class*=\"Footer\"]>div{margin-left:260px!important;padding-left:2rem!important}}.cta-banner{background:linear-gradient(135deg, #642DFF 0%, #8B5CF6 100%);border-radius:16px;padding:28px 32px;margin:40px 0 8px;display:flex;align-items:center;justify-content:space-between;gap:20px}.cta-banner-text h3{color:#ffffff;font-size:18px;font-weight:700;margin:0 0 6px!important;line-height:1.3}.cta-banner-text p{color:rgba(255, 255, 255, 0.82);font-size:14px;margin:0!important;line-height:1.5}.cta-banner-button{display:inline-flex;align-items:center;gap:6px;background:#ffffff;color:#642DFF!important;font-weight:700;font-size:14px;padding:11px 22px;border-radius:8px;text-decoration:none!important;white-space:nowrap;flex-shrink:0;transition:opacity 0.15s, transform 0.15s}.cta-banner-button:hover{opacity:0.92;transform:translateY(-1px)}@media (max-width: 640px){.cta-banner{flex-direction:column;text-align:center;padding:24px 20px}.cta-banner-button{width:100%;justify-content:center}}a[href*=\"mintlify.com\"][href*=\"poweredBy\"]{display:none!important}"}],"page":{"pagePath":"configuration/application","slug":"/configuration/application","pageMetadata":{"title":"Application","description":"Configure and deploy applications on Qovery","href":"/configuration/application"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Configure and deploy applications on Qovery\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Tab,Tabs,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsx(_components.p,{children:`Before creating an application:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`You have created an `,_jsx(_components.a,{href:`/configuration/environment`,children:`Environment`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`An application is a container unit that is part of a Project within an Environment. You can deploy multiple applications within the same environment, and they can communicate with each other and connect to databases.`}),`\n`,_jsx(Heading,{level:`2`,id:`deployment-sources`,children:`Deployment Sources`}),`\n`,_jsx(_components.p,{children:`Qovery supports two deployment sources for applications:`}),`\n`,_jsx(Heading,{level:`3`,id:`git-repository`,children:`Git Repository`}),`\n`,_jsx(_components.p,{children:`Qovery pulls your code from a Git repository, builds the application, and deploys it to your Kubernetes cluster.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Supported Providers`}),`: GitHub, GitLab, Bitbucket`]}),`\n`,_jsx(Heading,{level:`3`,id:`container-registry`,children:`Container Registry`}),`\n`,_jsx(_components.p,{children:`Qovery pulls a pre-built container image from your configured registry and deploys it to your Kubernetes cluster.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Container registries must be configured at the organization level by\nadministrators. See `,_jsx(_components.a,{href:`/configuration/organization/container-registry`,children:`Container Registry\nManagement`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`creating-an-application`,children:`Creating an Application`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Select Source`,children:_jsxs(_components.p,{children:[`Choose `,_jsx(_components.strong,{children:`Git Repository`}),` or `,_jsx(_components.strong,{children:`Container Registry`}),` as your deployment source`]})}),_jsxs(Step,{title:`Configure Source`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`For Git Repository`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Select Git provider`}),`\n`,_jsx(_components.li,{children:`Choose repository`}),`\n`,_jsx(_components.li,{children:`Select branch`}),`\n`,_jsx(_components.li,{children:`Specify root application path (if not at repository root)`}),`\n`,_jsx(_components.li,{children:`Configure Dockerfile path`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`For Container Registry`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Select configured registry`}),`\n`,_jsx(_components.li,{children:`Enter image name`}),`\n`,_jsx(_components.li,{children:`Specify image tag`}),`\n`]})]}),_jsx(Step,{title:`Configure Resources`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`vCPU`}),`: Default 500m (0.5 cores)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`RAM`}),`: Default 512MB`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`GPU`}),`: Optional GPU allocation (requires GPU-enabled cluster)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Auto-scaling`}),`: Configure min/max instances (optional)`]}),`\n`]})}),_jsx(Step,{title:`Configure Ports`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Internal Port`}),`: Port your application listens on`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Protocol`}),`: HTTPS, gRPC, TCP, or UDP`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Publicly Accessible`}),`: Enable to expose via load balancer`]}),`\n`]})}),_jsx(Step,{title:`Health Checks (Optional)`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Liveness Probe`}),`: Determines if container should be restarted`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Readiness Probe`}),`: Determines if container should receive traffic`]}),`\n`]})}),_jsx(Step,{title:`Environment Variables`,children:_jsx(_components.p,{children:`Configure environment variables for your application`})}),_jsxs(Step,{title:`Review and Deploy`,children:[_jsx(_components.p,{children:`Review configuration and choose:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Create`}),`: Save configuration without deploying`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Create and Deploy`}),`: Save and immediately deploy`]}),`\n`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`configuration`,children:`Configuration`}),`\n`,_jsx(Heading,{level:`3`,id:`general-settings`,children:`General Settings`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Git Repository Configuration`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Git provider and repository`}),`\n`,_jsx(_components.li,{children:`Branch selection`}),`\n`,_jsx(_components.li,{children:`Root application path`}),`\n`,_jsx(_components.li,{children:`Dockerfile path`}),`\n`,_jsx(_components.li,{children:`Build arguments`}),`\n`,_jsx(_components.li,{children:`Multi-stage build target selection`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Container Registry Configuration`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Registry selection`}),`\n`,_jsx(_components.li,{children:`Image name`}),`\n`,_jsx(_components.li,{children:`Image tag`}),`\n`,_jsx(_components.li,{children:`Entrypoint override`}),`\n`,_jsx(_components.li,{children:`CMD arguments override`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`resources`,children:`Resources`}),`\n`,_jsx(Heading,{level:`4`,id:`cpu-and-memory`,children:`CPU and Memory`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`vCPU allocation`}),`: Configure in millicores (e.g., 500m = 0.5 cores)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`RAM allocation`}),`: Configure in MB or GB`]}),`\n`,_jsx(_components.li,{children:`Adjust based on your application’s resource requirements`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`gpu`,children:`GPU`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Requirements`}),`: AWS with Karpenter enabled`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Number of GPUs per instance`}),`\n`,_jsx(_components.li,{children:`Ideal for AI/ML workloads`}),`\n`,_jsx(_components.li,{children:`Available GPU types depend on your cluster configuration`}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`instances-\u0026-autoscaling`,children:`Instances \u0026 Autoscaling`}),`\n`,_jsx(_components.p,{children:`Qovery offers three autoscaling modes to match your application’s needs:`}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Not recommended for production workloads`}),`. A single instance has no redundancy—if the pod fails or the node undergoes maintenance, your application will be temporarily unavailable.`]}),_jsx(_components.p,{children:`For high availability:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Set minimum instances to `,_jsx(_components.strong,{children:`2`}),` if your app can run on 1 instance`]}),`\n`,_jsxs(_components.li,{children:[`Set minimum instances to `,_jsx(_components.strong,{children:`3 or higher`}),` if your app requires multiple instances to handle necessary traffic`]}),`\n`,_jsx(_components.li,{children:`This ensures redundancy during node maintenance or pod failures`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Note`}),`: KEDA (Event-Driven) autoscaling supports setting minimum instances to `,_jsx(_components.strong,{children:`0`}),` for scale-to-zero capability on sporadic workloads.`]})]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`No Scaling`,id:`no-scaling`,\"data-child-heading-ids\":`[\"fixed-number-of-instances-no-autoscaling\"]`,children:[_jsx(Heading,{level:`3`,id:`fixed-number-of-instances-no-autoscaling`,children:`Fixed Number of Instances (No Autoscaling)`}),_jsx(_components.p,{children:`Your application runs with a fixed number of instances.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Configuration`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Set the number of instances to run`}),`\n`,_jsx(_components.li,{children:`No automatic scaling occurs`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Use Cases`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Development environments`}),`\n`,_jsx(_components.li,{children:`Proof of concepts (POC)`}),`\n`,_jsx(_components.li,{children:`Testing and experimentation`}),`\n`]})]}),_jsxs(Tab,{title:`HPA (CPU/Memory)`,id:`hpa-cpu%2Fmemory`,\"data-child-heading-ids\":`[\"classic-horizontal-pod-autoscaling\"]`,children:[_jsx(Heading,{level:`3`,id:`classic-horizontal-pod-autoscaling`,children:`Classic Horizontal Pod Autoscaling`}),_jsx(_components.p,{children:`Kubernetes HPA automatically scales your application based on CPU utilization, or both CPU and memory utilization.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Configuration`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Minimum instances`}),`: Baseline number of running pods`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Maximum instances`}),`: Scale-up limit`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`CPU threshold`}),`: Default 60% (scale up after 15 seconds above threshold)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Memory threshold`}),`: Optional, can be configured in addition to CPU`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scale down`}),`: Triggered after 5 minutes below threshold`]}),`\n`]}),_jsx(Note,{children:_jsx(_components.p,{children:`HPA supports CPU-only scaling or combined CPU+Memory scaling. Memory-only scaling is not supported.`})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How It Works`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Kubernetes metrics-server monitors resource usage`}),`\n`,_jsx(_components.li,{children:`When average CPU (or CPU+memory) exceeds the threshold, new pods are added`}),`\n`,_jsx(_components.li,{children:`When usage drops below threshold for 5 minutes, pods are removed`}),`\n`,_jsx(_components.li,{children:`Scales down to minimum instances during low traffic`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Suitable For`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`CPU-bound workloads (web servers, APIs)`}),`\n`,_jsx(_components.li,{children:`Memory-bound applications`}),`\n`,_jsx(_components.li,{children:`Applications with predictable traffic patterns`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Limitations`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Does not consider external events (message queues, streams, etc.)`}),`\n`,_jsx(_components.li,{children:`Reacts to resource usage, not workload depth`}),`\n`,_jsx(_components.li,{children:`May lag behind sudden traffic spikes`}),`\n`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`HPA uses Kubernetes `,_jsx(_components.a,{href:`https://github.com/kubernetes-sigs/metrics-server`,children:`metrics-server`}),` to monitor resource usage. Evaluation window is approximately 5 minutes for scale-down decisions.`]})})]}),_jsxs(Tab,{title:`KEDA (Event-Driven)`,id:`keda-event-driven`,\"data-child-tab-ids\":`[\"aws-sqs\",\"redis\",\"rabbitmq\"]`,\"data-child-heading-ids\":`[\"event-driven-autoscaling-with-keda\",\"migrating-from-hpa-to-keda\",\"general-configuration\",\"scaler-configuration\",\"authentication-methods\",\"scaler-examples-by-type\",\"aws-sqs-queue-scaling\",\"shared-iam-role-application-%2B-keda\",\"step-by-step-aws-configuration\",\"qovery-configuration\",\"resulting-behavior\",\"separate-iam-role-for-keda\",\"step-by-step-aws-configuration-2\",\"qovery-configuration-2\",\"resulting-behavior-2\",\"redis-list%2Fstream-scaling\",\"rabbitmq-queue-scaling\",\"additional-resources\"]`,children:[_jsx(Heading,{level:`3`,id:`event-driven-autoscaling-with-keda`,children:`Event-Driven Autoscaling with KEDA`}),_jsx(_components.p,{children:`Scale your application based on external event sources like message queues, streams, databases, and more.`}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`AWS and GCP clusters only`}),` - KEDA autoscaling is currently available for applications deployed on AWS and GCP.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisite: Enable KEDA at Cluster Level`})}),_jsx(_components.p,{children:`Before using event-driven autoscaling, KEDA must be enabled on your cluster:`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Navigate to your cluster settings`}),`\n`,_jsxs(_components.li,{children:[`Go to the `,_jsx(_components.strong,{children:`Add-ons`}),` tab`]}),`\n`,_jsxs(_components.li,{children:[`Enable the `,_jsx(_components.strong,{children:`KEDA`}),` option`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Redeploy your cluster`}),` for the changes to take effect`]}),`\n`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/qovery/9CNZQIdUELQe9KKR/images/configuration/application/cluster-keda-activation.png?fit=max\u0026auto=format\u0026n=9CNZQIdUELQe9KKR\u0026q=85\u0026s=125df6916a0e8ecc4e4d09811f384331`,alt:`Enable KEDA in cluster general settings`,\"data-og-width\":`3164`,width:`3164`,\"data-og-height\":`2070`,height:`2070`,\"data-path\":`images/configuration/application/cluster-keda-activation.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/qovery/9CNZQIdUELQe9KKR/images/configuration/application/cluster-keda-activation.png?w=280\u0026fit=max\u0026auto=format\u0026n=9CNZQIdUELQe9KKR\u0026q=85\u0026s=244c576068abc5f9772e14cd2290c57d 280w, https://mintcdn.com/qovery/9CNZQIdUELQe9KKR/images/configuration/application/cluster-keda-activation.png?w=560\u0026fit=max\u0026auto=format\u0026n=9CNZQIdUELQe9KKR\u0026q=85\u0026s=51a3c91c761b22926b52ad31e3006340 560w, https://mintcdn.com/qovery/9CNZQIdUELQe9KKR/images/configuration/application/cluster-keda-activation.png?w=840\u0026fit=max\u0026auto=format\u0026n=9CNZQIdUELQe9KKR\u0026q=85\u0026s=54bab151c6f69a29c06e842663ad94a0 840w, https://mintcdn.com/qovery/9CNZQIdUELQe9KKR/images/configuration/application/cluster-keda-activation.png?w=1100\u0026fit=max\u0026auto=format\u0026n=9CNZQIdUELQe9KKR\u0026q=85\u0026s=57bf0bfbbadd9b7d09f6213f53d7814a 1100w, https://mintcdn.com/qovery/9CNZQIdUELQe9KKR/images/configuration/application/cluster-keda-activation.png?w=1650\u0026fit=max\u0026auto=format\u0026n=9CNZQIdUELQe9KKR\u0026q=85\u0026s=e8a681a320de1b339aa1ae496b0a3307 1650w, https://mintcdn.com/qovery/9CNZQIdUELQe9KKR/images/configuration/application/cluster-keda-activation.png?w=2500\u0026fit=max\u0026auto=format\u0026n=9CNZQIdUELQe9KKR\u0026q=85\u0026s=141aa6b5a1be86527fab8e98a251801e 2500w`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`What is KEDA?`})}),_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://keda.sh`,children:`KEDA (Kubernetes Event-Driven Autoscaler)`}),` extends Kubernetes autoscaling capabilities by scaling based on external metrics and events rather than just CPU/memory.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Use Cases`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Queue-based workloads (SQS, RabbitMQ, Kafka)`}),`\n`,_jsx(_components.li,{children:`Stream processing (Kinesis, Kafka)`}),`\n`,_jsx(_components.li,{children:`Database polling (PostgreSQL, MySQL)`}),`\n`,_jsx(_components.li,{children:`Custom metrics (Prometheus, Datadog)`}),`\n`,_jsx(_components.li,{children:`Scheduled scaling (cron-based)`}),`\n`]}),_jsx(Heading,{level:`4`,id:`migrating-from-hpa-to-keda`,children:`Migrating from HPA to KEDA`}),_jsxs(_components.p,{children:[`Direct migration from HPA to KEDA is blocked. The reason is a Kubernetes conflict: both HPA and KEDA’s `,_jsx(_components.code,{children:`ScaledObject`}),` target the same Deployment replica count simultaneously, causing unpredictable scaling behavior.`]}),_jsxs(_components.p,{children:[`The required migration path is `,_jsx(_components.strong,{children:`HPA → No Scaling → KEDA`}),`:`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Switch your application to `,_jsx(_components.strong,{children:`No autoscaling (fixed instances)`}),` mode and save`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Redeploy`}),` — this removes the HPA resource from the cluster`]}),`\n`,_jsxs(_components.li,{children:[`Switch to `,_jsx(_components.strong,{children:`KEDA (Event-Driven)`}),` mode and configure your scalers`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Redeploy`}),` again`]}),`\n`]}),_jsx(Heading,{level:`4`,id:`general-configuration`,children:`General Configuration`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Required Settings`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Minimum instances`}),`: Baseline number of pods (minimum: 0 for scale-to-zero)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Maximum instances`}),`: Upper scaling limit`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Optional Settings`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Polling interval`}),`: How often KEDA checks the event source while the application runs 0 instances (default: 30 seconds)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cooldown period`}),`: Wait time after the last event before scaling back to 0 (default: 300 seconds)`]}),`\n`]}),_jsxs(_components.p,{children:[`Both settings only apply to scaling between 0 and 1 instance. Between 1 and the maximum, KEDA feeds its metrics to a Kubernetes HPA, which applies its own timing. See `,_jsx(_components.a,{href:`https://keda.sh/docs/latest/reference/scaledobject-spec/#pollinginterval`,children:_jsx(_components.code,{children:`pollingInterval`})}),` and `,_jsx(_components.a,{href:`https://keda.sh/docs/latest/reference/scaledobject-spec/#cooldownperiod`,children:_jsx(_components.code,{children:`cooldownPeriod`})}),` in the KEDA reference.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scale-to-Zero`}),`: KEDA supports setting minimum instances to `,_jsx(_components.strong,{children:`0`}),`, allowing your application to scale down completely when there are no events. When events are detected, KEDA automatically scales up from 0 to handle the workload. This is ideal for cost optimization on sporadic workloads.`]})}),_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Multiple scalers behavior`}),`: If you configure multiple scalers, KEDA uses the scaler that calculates the highest target number of instances. For example, if Scaler A monitors a queue with 15 messages and calculates 15 target instances (1 message per instance), and Scaler B monitors a queue with 50 messages and calculates 5 target instances (10 messages per instance), KEDA scales to 15 instances (the higher target).`]})}),_jsx(Heading,{level:`4`,id:`scaler-configuration`,children:`Scaler Configuration`}),_jsx(_components.p,{children:`Each scaler monitors a specific event source. You can add multiple scalers to respond to different metrics.`}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Built-in scalers only`}),`: Qovery currently supports KEDA’s built-in scalers. External scalers are not supported at this time.`]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`For Each Scaler`}),`:`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scaler Type`}),`: The event source type (e.g., `,_jsx(_components.code,{children:`aws-sqs-queue`}),`, `,_jsx(_components.code,{children:`rabbitmq`}),`, `,_jsx(_components.code,{children:`kafka`}),`, `,_jsx(_components.code,{children:`prometheus`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scaler YAML Configuration`}),`: Source-specific parameters in YAML format`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Trigger Authentication YAML`}),` (Optional): Authentication credentials if required`]}),`\n`]}),_jsxs(Info,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scaler YAML Configuration`}),` accepts the following fields:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`metadata`}),` - Scaler-specific parameters (required). Each scaler type has different metadata fields. See the `,_jsx(_components.a,{href:`https://keda.sh/docs/latest/scalers/`,children:`KEDA Scalers documentation`}),` for available parameters per scaler type.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`metricType`}),` - Metric target type: `,_jsx(_components.code,{children:`Value`}),`, `,_jsx(_components.code,{children:`AverageValue`}),`, or `,_jsx(_components.code,{children:`Utilization`}),` (optional)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`useCachedMetrics`}),` - Whether to use cached metrics (optional, boolean)`]}),`\n`]})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Common Scaler Types`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`aws-sqs-queue`}),` - AWS Simple Queue Service`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`aws-kinesis-stream`}),` - AWS Kinesis Data Streams`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`rabbitmq`}),` - RabbitMQ queues`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`kafka`}),` - Apache Kafka topics`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`prometheus`}),` - Prometheus metrics`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`postgresql`}),` - PostgreSQL queries`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`redis`}),` - Redis lists/streams`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`cron`}),` - Time-based scaling`]}),`\n`]}),_jsxs(_components.p,{children:[`For the complete list, see `,_jsx(_components.a,{href:`https://keda.sh/docs/latest/scalers/`,children:`KEDA Scalers documentation`}),`.`]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`authentication-methods`,children:`Authentication Methods`}),_jsx(_components.p,{children:`KEDA supports multiple authentication methods. Each scaler type supports a subset of these methods.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Common Authentication Methods`}),`:`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`1. podIdentity`}),` - Use IAM roles (AWS) or managed identities (Azure)`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`podIdentity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` provider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`aws`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # or azure`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` identityOwner`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`workload`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # inherit from application service account`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # OR`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` roleArn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`arn:aws:iam::123456789012:role/MyRole`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # specify role directly`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`2. secretTargetRef`}),` - Reference Qovery environment variables or secrets`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`secretTargetRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`parameter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`connectionString`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Parameter name defined by the scaler`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`qovery.env.MY_CONNECTION_STRING`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Qovery variable reference`})]}),`\n`]})})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`qovery.env.VARIABLE_NAME`}),` to reference environment variables or secrets defined in your Qovery application.`]})}),_jsxs(_components.p,{children:[`For complete authentication options, see `,_jsx(_components.a,{href:`https://keda.sh/docs/latest/concepts/authentication/`,children:`KEDA Authentication documentation`}),`.`]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`scaler-examples-by-type`,children:`Scaler Examples by Type`}),_jsxs(Tabs,{children:[_jsxs(Tab,{title:`AWS SQS`,id:`aws-sqs`,\"data-child-tab-ids\":`[\"shared-iam-role\",\"keda-only-iam-role\"]`,\"data-child-heading-ids\":`[\"aws-sqs-queue-scaling\",\"shared-iam-role-application-%2B-keda\",\"step-by-step-aws-configuration\",\"qovery-configuration\",\"resulting-behavior\",\"separate-iam-role-for-keda\",\"step-by-step-aws-configuration-2\",\"qovery-configuration-2\",\"resulting-behavior-2\"]`,children:[_jsx(Heading,{level:`3`,id:`aws-sqs-queue-scaling`,children:`AWS SQS Queue Scaling`}),_jsx(_components.p,{children:`Let’s explore AWS SQS in detail as it’s a common use case.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How KEDA Works with SQS`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`KEDA reads queue metrics (number of messages) via AWS CloudWatch`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`KEDA does NOT consume messages`}),` from the queue`]}),`\n`,_jsx(_components.li,{children:`Your application pods consume and process the actual messages`}),`\n`,_jsx(_components.li,{children:`KEDA only uses metrics to make scaling decisions`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Authentication Requirements`}),`:`]}),_jsx(_components.p,{children:`AWS SQS requires IAM authentication. Qovery supports two authentication models:`}),_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Shared IAM Role`,id:`shared-iam-role`,\"data-child-heading-ids\":`[\"shared-iam-role-application-%2B-keda\",\"step-by-step-aws-configuration\",\"qovery-configuration\",\"resulting-behavior\"]`,children:[_jsx(Heading,{level:`3`,id:`shared-iam-role-application-+-keda`,children:`Shared IAM Role (Application + KEDA)`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When to use`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Your application already consumes from SQS`}),`\n`,_jsx(_components.li,{children:`You want to minimize IAM roles`}),`\n`,_jsx(_components.li,{children:`Simpler configuration`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How it works`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Single IAM role attached to your application’s service account`}),`\n`,_jsx(_components.li,{children:`Both application pods and KEDA use the same IAM role`}),`\n`,_jsx(_components.li,{children:`No AWS credentials stored as secrets`}),`\n`]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`step-by-step-aws-configuration`,children:`Step-by-Step AWS Configuration`}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Create IAM Policy for SQS Access`,children:[_jsx(_components.p,{children:`This policy grants your application the necessary permissions to interact with SQS (consume, process messages) and allows KEDA to read queue metrics.`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`IAM Console`}),` → `,_jsx(_components.strong,{children:`Policies`}),` → `,_jsx(_components.strong,{children:`Create policy`})]}),`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`JSON`}),` tab and paste:`]}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`17`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`17`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Version\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2012-10-17\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Statement\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Sid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"SqsFullAccess\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Allow\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Action\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sqs:GetQueueAttributes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sqs:GetQueueUrl\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sqs:ReceiveMessage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sqs:DeleteMessage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sqs:ChangeMessageVisibility\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Resource\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arn:aws:sqs:\u003cregion>:\u003caccount-id>:\u003cqueue-name>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsxs(_components.li,{children:[`Name the policy: `,_jsx(_components.code,{children:`AppSqsFullAccessPolicy`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create policy`})]}),`\n`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`This policy includes both application permissions (`,_jsx(_components.code,{children:`ReceiveMessage`}),`, `,_jsx(_components.code,{children:`DeleteMessage`}),`) and KEDA metric reading permissions (`,_jsx(_components.code,{children:`GetQueueAttributes`}),`).`]})})]}),_jsxs(Step,{title:`Create IAM Role and Service Account`,children:[_jsx(_components.p,{children:`Follow the complete tutorial to create an IAM role and configure your application’s service account with AWS IAM roles.`}),_jsx(Card,{title:`AWS IAM Roles Tutorial`,icon:`book`,href:`/getting-started/guides/advanced-tutorials/aws-iam-roles`,children:_jsx(_components.p,{children:`Step-by-step guide to create IAM roles and service accounts for Qovery applications`})}),_jsx(_components.p,{children:`When creating the role:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Attach the policy created in Step 1: `,_jsx(_components.code,{children:`AppSqsFullAccessPolicy`})]}),`\n`,_jsxs(_components.li,{children:[`Name the role: `,_jsx(_components.code,{children:`AppSqsConsumerRole`})]}),`\n`,_jsx(_components.li,{children:`Note the role ARN for later use`}),`\n`]})]}),_jsxs(Step,{title:`Configure Trust Relationship for KEDA`,children:[_jsx(_components.p,{children:`To allow KEDA to inherit the IAM role from your application’s service account, you must update the trust relationship.`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the role you created: `,_jsx(_components.code,{children:`AppSqsConsumerRole`})]}),`\n`,_jsxs(_components.li,{children:[`Go to the `,_jsx(_components.strong,{children:`Trust relationships`}),` tab and click `,_jsx(_components.strong,{children:`Edit trust policy`})]}),`\n`,_jsx(_components.li,{children:`Update the JSON to allow both your application namespace AND the KEDA operator:`}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`21`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`21`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Version\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2012-10-17\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Statement\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Allow\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Principal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Federated\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arn:aws:iam::\u003caccount-id>:oidc-provider/oidc.eks.\u003cregion>.amazonaws.com/id/\u003coidc-id>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Action\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sts:AssumeRoleWithWebIdentity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Condition\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"StringEquals\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"oidc.eks.\u003cregion>.amazonaws.com/id/\u003coidc-id>:aud\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sts.amazonaws.com\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"oidc.eks.\u003cregion>.amazonaws.com/id/\u003coidc-id>:sub\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"system:serviceaccount:\u003cyour-namespace>:\u003cservice-account-name>\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"system:serviceaccount:kube-system:keda-operator\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Update policy`})]}),`\n`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`\u003caccount-id>`}),`, `,_jsx(_components.code,{children:`\u003cregion>`}),`, `,_jsx(_components.code,{children:`\u003coidc-id>`}),`, `,_jsx(_components.code,{children:`\u003cyour-namespace>`}),`, and `,_jsx(_components.code,{children:`\u003cservice-account-name>`}),` with your specific values. The key addition is the `,_jsx(_components.code,{children:`keda-operator`}),` service account in the trust relationship.`]})})]})]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`qovery-configuration`,children:`Qovery Configuration`}),_jsx(_components.p,{children:`After completing the AWS configuration steps above, configure the KEDA scaler in Qovery.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scaler YAML`}),` (paste in “Configuration YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` queueURL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://sqs.us-east-1.amazonaws.com/123456789012/my-queue\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` awsRegion`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"us-east-1\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` queueLength`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` activationQueueLength`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Trigger Authentication YAML`}),` (paste in “Trigger Authentication YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`podIdentity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` provider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`aws`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` identityOwner`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`workload`})]}),`\n`]})})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`With `,_jsx(_components.code,{children:`identityOwner: workload`}),`, KEDA automatically inherits the IAM role from your application’s service account. This requires the trust relationship configuration from Step 3.`]})}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`resulting-behavior`,children:`Resulting Behavior`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Both application and KEDA use the same IAM role`}),` - The role is shared between your application pods and KEDA operator`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Application can consume from SQS`}),` - Your application has full permissions to receive and process messages`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`KEDA monitors queue depth`}),` - KEDA uses the same role to read queue metrics for scaling decisions`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Simplified IAM management`}),` - Only one role to manage and maintain`]}),`\n`]})]}),_jsxs(Tab,{title:`KEDA-Only IAM Role`,id:`keda-only-iam-role`,\"data-child-heading-ids\":`[\"separate-iam-role-for-keda\",\"step-by-step-aws-configuration-2\",\"qovery-configuration-2\",\"resulting-behavior-2\"]`,children:[_jsx(Heading,{level:`3`,id:`separate-iam-role-for-keda`,children:`Separate IAM Role for KEDA`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When to use`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Your application does NOT consume from SQS`}),`\n`,_jsx(_components.li,{children:`KEDA scales based on queue depth, but another service processes messages`}),`\n`,_jsx(_components.li,{children:`You want separate security boundaries`}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How it works`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Dedicated IAM role for KEDA’s scaling operations`}),`\n`,_jsx(_components.li,{children:`Application has no AWS identity`}),`\n`,_jsx(_components.li,{children:`IAM role ARN specified directly in trigger authentication`}),`\n`]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`step-by-step-aws-configuration-2`,children:`Step-by-Step AWS Configuration`}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Create the IAM Policy`,children:[_jsx(_components.p,{children:`This policy grants KEDA the minimum permissions to read SQS metrics (queue depth) without allowing it to process or delete messages.`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`IAM Console`}),` → `,_jsx(_components.strong,{children:`Policies`}),` → `,_jsx(_components.strong,{children:`Create policy`})]}),`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`JSON`}),` tab and paste:`]}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Version\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2012-10-17\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Statement\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Sid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"KedaSqsMetricReadAccess\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Allow\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Action\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sqs:GetQueueAttributes\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sqs:GetQueueUrl\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Resource\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arn:aws:sqs:\u003cregion>:\u003caccount-id>:\u003cqueue-name>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsxs(_components.li,{children:[`Name the policy: `,_jsx(_components.code,{children:`KedaSqsMetricReadPolicy`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create policy`})]}),`\n`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Not required`}),`: `,_jsx(_components.code,{children:`sqs:ReceiveMessage`}),` - KEDA only reads metrics, it does not consume or delete messages.`]})})]}),_jsxs(Step,{title:`Create the IAM Role (OIDC Integration)`,children:[_jsx(_components.p,{children:`This step creates the AWS identity that the KEDA operator will assume using IRSA (IAM Roles for Service Accounts).`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Navigate to `,_jsx(_components.strong,{children:`IAM`}),` → `,_jsx(_components.strong,{children:`Roles`}),` → `,_jsx(_components.strong,{children:`Create role`})]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Web Identity`}),` as the trusted entity type`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Identity provider`}),`: Select your EKS cluster’s OIDC URL from the dropdown`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Audience`}),`: Select `,_jsx(_components.code,{children:`sts.amazonaws.com`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Next`})]}),`\n`,_jsxs(_components.li,{children:[`Search for and attach the policy created in Step 1: `,_jsx(_components.code,{children:`KedaSqsMetricReadPolicy`})]}),`\n`,_jsxs(_components.li,{children:[`Name the role: `,_jsx(_components.code,{children:`KedaOperatorScalingRole`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create role`})]}),`\n`]})]}),_jsxs(Step,{title:`Refine the Trust Relationship`,children:[_jsxs(_components.p,{children:[`To ensure maximum security, restrict this role so that only the KEDA operator pod in the `,_jsx(_components.code,{children:`kube-system`}),` namespace can use it.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the role you just created: `,_jsx(_components.code,{children:`KedaOperatorScalingRole`})]}),`\n`,_jsxs(_components.li,{children:[`Go to the `,_jsx(_components.strong,{children:`Trust relationships`}),` tab and click `,_jsx(_components.strong,{children:`Edit trust policy`})]}),`\n`,_jsx(_components.li,{children:`Update the JSON, replacing the placeholders with your cluster-specific info:`}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Version\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2012-10-17\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Statement\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Allow\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Principal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Federated\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"arn:aws:iam::\u003caccount-id>:oidc-provider/oidc.eks.\u003cregion>.amazonaws.com/id/\u003coidc-id>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Action\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sts:AssumeRoleWithWebIdentity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"Condition\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"StringEquals\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"oidc.eks.\u003cregion>.amazonaws.com/id/\u003coidc-id>:aud\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sts.amazonaws.com\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"oidc.eks.\u003cregion>.amazonaws.com/id/\u003coidc-id>:sub\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"system:serviceaccount:kube-system:keda-operator\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Update policy`})]}),`\n`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`\u003caccount-id>`}),`, `,_jsx(_components.code,{children:`\u003cregion>`}),`, and `,_jsx(_components.code,{children:`\u003coidc-id>`}),` with your AWS account ID, EKS region, and OIDC provider ID. You can find the OIDC provider URL in your EKS cluster details under the `,_jsx(_components.strong,{children:`Configuration`}),` tab.`]})})]})]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`qovery-configuration-2`,children:`Qovery Configuration`}),_jsx(_components.p,{children:`After completing the AWS configuration steps above, configure the KEDA scaler in Qovery with the IAM role ARN you created.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scaler YAML`}),` (paste in “Configuration YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` queueURL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://sqs.us-east-1.amazonaws.com/123456789012/my-queue\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` awsRegion`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"us-east-1\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` queueLength`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` activationQueueLength`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Trigger Authentication YAML`}),` (paste in “Trigger Authentication YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`podIdentity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` provider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`aws`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` roleArn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`arn:aws:iam::\u003caccount-id>:role/KedaOperatorScalingRole`})]}),`\n`]})})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`\u003caccount-id>`}),` with your AWS account ID. You can find the complete role ARN in the IAM Console under the `,_jsx(_components.strong,{children:`KedaOperatorScalingRole`}),` details page.`]})}),_jsx(Note,{children:_jsx(_components.p,{children:`No ServiceAccount configuration is required on the application itself. The application runs without AWS identity.`})}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`resulting-behavior-2`,children:`Resulting Behavior`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Only KEDA has AWS credentials`}),` - The dedicated IAM role is only accessible to KEDA operator`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Application runs without AWS identity`}),` - Your application pods have no AWS permissions`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scaling is isolated from application permissions`}),` - KEDA can read queue metrics independently of the application’s capabilities`]}),`\n`]})]})]})]}),_jsxs(Tab,{title:`Redis`,id:`redis`,\"data-child-heading-ids\":`[\"redis-list%2Fstream-scaling\"]`,children:[_jsx(Heading,{level:`3`,id:`redis-list/stream-scaling`,children:`Redis List/Stream Scaling`}),_jsx(_components.p,{children:`Scale your application based on Redis list length or stream lag.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scaler Types`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`redis`}),` - For Redis lists`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`redis-streams`}),` - For Redis streams`]}),`\n`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Authentication`}),`:\nRedis does NOT use IAM authentication. You can provide credentials directly in the configuration or reference Qovery environment variables/secrets.`]}),_jsx(_components.hr,{}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scaler YAML Example`}),` (paste in “Configuration YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` address`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`redis-queue.default.svc.cluster.local:6379`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` listName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`myqueue`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` listLength`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` databaseIndex`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Trigger Authentication YAML`}),` (paste in “Trigger Authentication YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`secretTargetRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`parameter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`password`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`qovery.env.REDIS_PASSWORD`})]}),`\n`]})})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`You can reference Qovery environment variables or secrets using `,_jsx(_components.code,{children:`qovery.env.VARIABLE_NAME`}),`, or provide credentials directly in the YAML configuration.`]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Configuration Parameters`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`address`}),` - Redis server address (host:port or Kubernetes service DNS)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`listName`}),` - Name of the Redis list to monitor`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`listLength`}),` - Target list length per instance`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`databaseIndex`}),` - Redis database index (optional, default: “0”)`]}),`\n`]}),_jsxs(_components.p,{children:[`For complete parameter reference, see `,_jsx(_components.a,{href:`https://keda.sh/docs/latest/scalers/redis-lists/`,children:`KEDA Redis Scaler documentation`}),`.`]})]}),_jsxs(Tab,{title:`RabbitMQ`,id:`rabbitmq`,\"data-child-heading-ids\":`[\"rabbitmq-queue-scaling\"]`,children:[_jsx(Heading,{level:`3`,id:`rabbitmq-queue-scaling`,children:`RabbitMQ Queue Scaling`}),_jsx(_components.p,{children:`Scale your application based on RabbitMQ queue depth.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Authentication`}),`:\nRabbitMQ does NOT use IAM authentication. You can provide credentials directly in the configuration or reference Qovery environment variables/secrets.`]}),_jsx(_components.hr,{}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scaler YAML Example`}),` (paste in “Configuration YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` protocol`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`amqp`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` queueName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`myqueue`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` mode`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`QueueLength`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Trigger Authentication YAML`}),` (paste in “Trigger Authentication YAML” field):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`secretTargetRef`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`parameter`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`host`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`qovery.env.RABBITMQ_URL`})]}),`\n`]})})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`You can reference Qovery environment variables or secrets using `,_jsx(_components.code,{children:`qovery.env.VARIABLE_NAME`}),`, or provide the connection string directly in the YAML configuration. The RabbitMQ URL format is: `,_jsx(_components.code,{children:`amqp://user:password@rabbitmq.example.com:5672/vhost`})]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Configuration Parameters`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`protocol`}),` - Connection protocol: `,_jsx(_components.code,{children:`amqp`}),` or `,_jsx(_components.code,{children:`http`}),` (optional, default: `,_jsx(_components.code,{children:`amqp`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`queueName`}),` - Name of the RabbitMQ queue to monitor`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`mode`}),` - Scaling mode: `,_jsx(_components.code,{children:`QueueLength`}),` (default) or `,_jsx(_components.code,{children:`MessageRate`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`value`}),` - Target queue length per instance`]}),`\n`]}),_jsxs(_components.p,{children:[`For complete parameter reference, see `,_jsx(_components.a,{href:`https://keda.sh/docs/latest/scalers/rabbitmq-queue/`,children:`KEDA RabbitMQ Scaler documentation`}),`.`]})]})]}),_jsx(_components.hr,{}),_jsx(Heading,{level:`4`,id:`additional-resources`,children:`Additional Resources`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://keda.sh/docs/`,children:`KEDA Official Documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://keda.sh/docs/latest/scalers/`,children:`KEDA Scalers Reference`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://keda.sh/docs/latest/concepts/authentication/`,children:`KEDA Authentication Guide`})}),`\n`]}),_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Testing your KEDA configuration`}),`: Start with a low `,_jsx(_components.code,{children:`queueLength`}),` value and a small `,_jsx(_components.code,{children:`maxInstances`}),` to test scaling behavior. Monitor your application logs and KEDA operator logs to verify scaling triggers work as expected.`]})})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`storage`,children:`Storage`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Ephemeral Storage`}),` (default):`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Container filesystem`}),`\n`,_jsx(_components.li,{children:`Data lost on restart`}),`\n`,_jsx(_components.li,{children:`Use for temporary files and caches`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Persistent Storage`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Block storage volumes`}),`\n`,_jsx(_components.li,{children:`Data persists across restarts`}),`\n`,_jsx(_components.li,{children:`Configure mount path and size`}),`\n`,_jsx(_components.li,{children:`SSD storage type (fast_ssd)`}),`\n`,_jsx(_components.li,{children:`Typical range: 5GB-10GB`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Persistent storage cannot be shared between replicas. For shared storage, use\nexternal services like S3 or blob storage.`})}),`\n`,_jsx(Heading,{level:`3`,id:`ports`,children:`Ports`}),`\n`,_jsx(_components.p,{children:`Configure network exposure for your application:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Port Configuration`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Internal Port`}),`: Port your application listens on`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`External Port`}),`: HTTPS defaults to 443, HTTP to 80`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Protocol`}),`: HTTP/HTTPS, gRPC, TCP, UDP`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Publicly Accessible`}),`: Toggle to expose via load balancer`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`URL Rewriting`}),`: Configure path rewriting (optional)`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`For HTTP and gRPC protocols, the external port is set to 443 by default with\nautomatic TLS.`})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Connection Timeouts`}),`: Connections on public ports are automatically closed\nafter 60 seconds by default. Configure custom timeouts in advanced settings\nfor long-lived connections.`]})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`TCP/UDP Ports`}),`: Exposing TCP/UDP ports publicly requires provisioning a\ndedicated load balancer, which takes approximately 15 minutes and incurs\nadditional cloud provider costs.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`health-checks`,children:`Health Checks`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Liveness Probe`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Determines if container should be restarted`}),`\n`,_jsx(_components.li,{children:`Configure endpoint, port, initial delay, and intervals`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Readiness Probe`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Determines if container should receive traffic`}),`\n`,_jsx(_components.li,{children:`Configure endpoint, port, initial delay, and intervals`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`deployment-restrictions`,children:`Deployment Restrictions`}),`\n`,_jsx(_components.p,{children:`Configure when deployments should be triggered:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`File path filters`}),`: Deploy only when specific files change`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Branch filters`}),`: Deploy only from specific branches`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`internet-connectivity`,children:`Internet Connectivity`}),`\n`,_jsx(Heading,{level:`3`,id:`qovery-assigned-domains`,children:`Qovery-Assigned Domains`}),`\n`,_jsx(_components.p,{children:`Every publicly accessible application receives an automatic domain with TLS certificate:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\u003capp-name>-\u003crandom-id>.\u003ccluster-id>.qovery.io`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`custom-domains`,children:`Custom Domains`}),`\n`,_jsx(_components.p,{children:`Add your own custom domain to your application:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add Domain`,children:_jsx(_components.p,{children:`Navigate to application settings → Domains → Add Domain`})}),_jsxs(Step,{title:`Configure DNS`,children:[_jsx(_components.p,{children:`Create a CNAME record in your DNS provider:`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`CNAME: your-domain.com → \u003capp-name>.\u003ccluster-id>.qovery.io`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsx(Step,{title:`Verify`,children:_jsx(_components.p,{children:`Qovery automatically validates DNS configuration and provisions SSL/TLS certificate`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`cdn-proxy-mode`,children:`CDN Proxy Mode`}),`\n`,_jsx(_components.p,{children:`Enable CDN proxy mode for custom domains to route traffic through your CDN provider.`}),`\n`,_jsx(Heading,{level:`2`,id:`additional-features`,children:`Additional Features`}),`\n`,_jsx(Heading,{level:`3`,id:`service-connections`,children:`Service Connections`}),`\n`,_jsx(_components.p,{children:`Applications can connect to:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Databases within the same environment`}),`\n`,_jsx(_components.li,{children:`Other applications within the same environment`}),`\n`,_jsx(_components.li,{children:`External services via environment variables`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Connection details are automatically injected as environment variables. See `,_jsx(_components.a,{href:`/configuration/environment-variables`,children:`Environment Variables`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`ssh-access`,children:`SSH Access`}),`\n`,_jsxs(_components.p,{children:[`Access running containers via SSH using the `,_jsx(_components.a,{href:`/cli/commands/shell`,children:`Qovery CLI`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`qovery`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` shell`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`clone-service`,children:`Clone Service`}),`\n`,_jsx(_components.p,{children:`Duplicate an application configuration to the same or different environment. Cloning copies:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`General configuration`}),`\n`,_jsx(_components.li,{children:`Resource settings`}),`\n`,_jsx(_components.li,{children:`Port configuration`}),`\n`,_jsx(_components.li,{children:`Storage configuration`}),`\n`,_jsx(_components.li,{children:`Build settings`}),`\n`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Cloning excludes custom domains and some built-in environment variables to\nprevent conflicts.`})}),`\n`,_jsx(Heading,{level:`3`,id:`build-settings`,children:`Build Settings`}),`\n`,_jsxs(_components.p,{children:[`Configure how your application is built from `,_jsx(_components.strong,{children:`Settings`}),` > `,_jsx(_components.strong,{children:`Build settings`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Build timeout`}),`\n`,_jsx(_components.li,{children:`CPU, RAM, and ephemeral storage available to the build`}),`\n`,_jsx(_components.li,{children:`BuildKit cache`}),`\n`,_jsx(_components.li,{children:`Git submodules`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/configuration/service-advanced-settings#build-settings`,children:`Build Settings`}),` for details.`]}),`\n`,_jsx(Heading,{level:`3`,id:`advanced-settings`,children:`Advanced Settings`}),`\n`,_jsx(_components.p,{children:`Configure advanced options including:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Deployment strategy`}),`\n`,_jsx(_components.li,{children:`Network settings`}),`\n`,_jsx(_components.li,{children:`Node affinity`}),`\n`,_jsx(_components.li,{children:`Annotations and labels`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/configuration/service-advanced-settings`,children:`Service Advanced Settings`}),` for details.`]}),`\n`,_jsx(Heading,{level:`3`,id:`delete-application`,children:`Delete Application`}),`\n`,_jsx(_components.p,{children:`To delete an application:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Navigate to application settings`}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Delete Application`})]}),`\n`,_jsx(_components.li,{children:`Confirm deletion`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Deleting an application is permanent and cannot be undone. All associated data\nand configurations will be removed.`})}),`\n`,_jsx(Heading,{level:`2`,id:`related-resources`,children:`Related Resources`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Deploy Your First App`,icon:`rocket`,href:`/getting-started/guides/getting-started/deploy-your-first-application`,children:_jsx(_components.p,{children:`Step-by-step deployment guide`})}),_jsx(Card,{title:`Environment Variables`,icon:`key`,href:`/configuration/environment-variables`,children:_jsx(_components.p,{children:`Manage configuration and secrets`})}),_jsx(Card,{title:`Databases`,icon:`database`,href:`/configuration/database`,children:_jsx(_components.p,{children:`Connect databases to your application`})}),_jsx(Card,{title:`Auto-Deploy`,icon:`arrows-rotate`,href:`/configuration/deployment/auto-deploy`,children:_jsx(_components.p,{children:`Set up automatic deployments`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Application","description":"Configure and deploy applications on Qovery","href":"/configuration/application"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Deployment Sources","slug":"deployment-sources","depth":2,"children":[{"title":"Git Repository","slug":"git-repository","depth":3,"children":[]},{"title":"Container Registry","slug":"container-registry","depth":3,"children":[]}]},{"title":"Creating an Application","slug":"creating-an-application","depth":2,"children":[]},{"title":"Configuration","slug":"configuration","depth":2,"children":[{"title":"General Settings","slug":"general-settings","depth":3,"children":[]},{"title":"Resources","slug":"resources","depth":3,"children":[]},{"title":"CPU and Memory","slug":"cpu-and-memory","depth":4,"children":[]},{"title":"GPU","slug":"gpu","depth":4,"children":[]},{"title":"Instances \u0026 Autoscaling","slug":"instances-\u0026-autoscaling","depth":4,"children":[]},{"title":"Fixed Number of Instances (No Autoscaling)","slug":"fixed-number-of-instances-no-autoscaling","depth":3,"children":[],"tabId":"no-scaling"},{"title":"Classic Horizontal Pod Autoscaling","slug":"classic-horizontal-pod-autoscaling","depth":3,"children":[],"tabId":"hpa-cpu%2Fmemory"},{"title":"Event-Driven Autoscaling with KEDA","slug":"event-driven-autoscaling-with-keda","depth":3,"children":[],"tabId":"keda-event-driven"},{"title":"Migrating from HPA to KEDA","slug":"migrating-from-hpa-to-keda","depth":4,"children":[],"tabId":"keda-event-driven"},{"title":"General Configuration","slug":"general-configuration","depth":4,"children":[],"tabId":"keda-event-driven"},{"title":"Scaler Configuration","slug":"scaler-configuration","depth":4,"children":[],"tabId":"keda-event-driven"},{"title":"Authentication Methods","slug":"authentication-methods","depth":4,"children":[],"tabId":"keda-event-driven"},{"title":"Scaler Examples by Type","slug":"scaler-examples-by-type","depth":4,"children":[],"tabId":"keda-event-driven"},{"title":"AWS SQS Queue Scaling","slug":"aws-sqs-queue-scaling","depth":3,"children":[],"tabId":"aws-sqs"},{"title":"Shared IAM Role (Application + KEDA)","slug":"shared-iam-role-application-+-keda","depth":3,"children":[],"tabId":"shared-iam-role"},{"title":"Step-by-Step AWS Configuration","slug":"step-by-step-aws-configuration","depth":4,"children":[],"tabId":"shared-iam-role"},{"title":"Qovery Configuration","slug":"qovery-configuration","depth":4,"children":[],"tabId":"shared-iam-role"},{"title":"Resulting Behavior","slug":"resulting-behavior","depth":4,"children":[],"tabId":"shared-iam-role"},{"title":"Separate IAM Role for KEDA","slug":"separate-iam-role-for-keda","depth":3,"children":[],"tabId":"keda-only-iam-role"},{"title":"Step-by-Step AWS Configuration","slug":"step-by-step-aws-configuration-2","depth":4,"children":[],"tabId":"keda-only-iam-role"},{"title":"Qovery Configuration","slug":"qovery-configuration-2","depth":4,"children":[],"tabId":"keda-only-iam-role"},{"title":"Resulting Behavior","slug":"resulting-behavior-2","depth":4,"children":[],"tabId":"keda-only-iam-role"},{"title":"Redis List/Stream Scaling","slug":"redis-list/stream-scaling","depth":3,"children":[],"tabId":"redis"},{"title":"RabbitMQ Queue Scaling","slug":"rabbitmq-queue-scaling","depth":3,"children":[],"tabId":"rabbitmq"},{"title":"Additional Resources","slug":"additional-resources","depth":4,"children":[],"tabId":"keda-event-driven"},{"title":"Storage","slug":"storage","depth":3,"children":[]},{"title":"Ports","slug":"ports","depth":3,"children":[]},{"title":"Health Checks","slug":"health-checks","depth":3,"children":[]},{"title":"Deployment Restrictions","slug":"deployment-restrictions","depth":3,"children":[]}]},{"title":"Internet Connectivity","slug":"internet-connectivity","depth":2,"children":[{"title":"Qovery-Assigned Domains","slug":"qovery-assigned-domains","depth":3,"children":[]},{"title":"Custom Domains","slug":"custom-domains","depth":3,"children":[]},{"title":"CDN Proxy Mode","slug":"cdn-proxy-mode","depth":3,"children":[]}]},{"title":"Additional Features","slug":"additional-features","depth":2,"children":[{"title":"Service Connections","slug":"service-connections","depth":3,"children":[]},{"title":"SSH Access","slug":"ssh-access","depth":3,"children":[]},{"title":"Clone Service","slug":"clone-service","depth":3,"children":[]},{"title":"Build Settings","slug":"build-settings","depth":3,"children":[]},{"title":"Advanced Settings","slug":"advanced-settings","depth":3,"children":[]},{"title":"Delete Application","slug":"delete-application","depth":3,"children":[]}]},{"title":"Related Resources","slug":"related-resources","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/qovery/0bf2b14fb00c53b9/custom.js","/docs/_mintlify/custom/qovery/a066ee21572976bb/reo.js"],"subdomain":"qovery","siteName":"Qovery","title":"Application - Qovery","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-08T09:58:22.101Z","originalFileLocation":"configuration/application.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Configure and deploy applications on Qovery\">\u003cmeta data-mint-head name=\"application-name\" content=\"Qovery\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Application - Qovery\">\u003cmeta data-mint-head property=\"og:description\" content=\"Configure and deploy applications on Qovery\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Qovery\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.qovery.com/docs/configuration/application\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qovery.mintlify.site/docs/_mintlify/api/og/v2?division=Workloads\u0026amp;title=Application\u0026amp;description=Configure+and+deploy+applications+on+Qovery\u0026amp;theme=c6d6a14f46d32f5b235bce1e\u0026amp;signature=ac445725315bc65c56e83bc302bcc0d3da9f50ab21250e8f77ca264c84797e26\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Application - Qovery\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Configure and deploy applications on Qovery\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qovery.mintlify.site/docs/_mintlify/api/og/v2?division=Workloads\u0026amp;title=Application\u0026amp;description=Configure+and+deploy+applications+on+Qovery\u0026amp;theme=c6d6a14f46d32f5b235bce1e\u0026amp;signature=ac445725315bc65c56e83bc302bcc0d3da9f50ab21250e8f77ca264c84797e26\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/qovery/ujffYmd-5c8eNJut/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Qovery\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#642DFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.qovery.com/docs/configuration/application\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/configuration/application.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.qovery.com/#organization\",\"name\":\"Qovery\",\"url\":\"https://www.qovery.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qovery/Nvnl0g5BHzA0XQmy/images/logos/qovery-logo-black.svg?fit=max\u0026auto=format\u0026n=Nvnl0g5BHzA0XQmy\u0026q=85\u0026s=fd1a292f8293eb3cf8763f75af6ee9d4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.qovery.com/docs#website\",\"name\":\"Qovery\",\"url\":\"https://www.qovery.com/docs\",\"publisher\":{\"@id\":\"https://www.qovery.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.qovery.com/docs/configuration/application#webpage\",\"url\":\"https://www.qovery.com/docs/configuration/application\",\"name\":\"Application\",\"description\":\"Configure and deploy applications on Qovery\",\"dateModified\":\"2026-10-08T09:58:22.101Z\",\"isPartOf\":{\"@id\":\"https://www.qovery.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.qovery.com/docs/configuration/application#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.qovery.com/docs/configuration/application#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Qovery\",\"item\":\"https://www.qovery.com/docs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Application\",\"item\":\"https://www.qovery.com/docs/configuration/application\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.qovery.com/docs/configuration/application#article\",\"headline\":\"Application\",\"name\":\"Application\",\"description\":\"Configure and deploy applications on Qovery\",\"url\":\"https://www.qovery.com/docs/configuration/application\",\"mainEntityOfPage\":{\"@id\":\"https://www.qovery.com/docs/configuration/application#webpage\"},\"dateModified\":\"2026-10-08T09:58:22.101Z\",\"publisher\":{\"@id\":\"https://www.qovery.com/#organization\"},\"isPartOf\":{\"@id\":\"https://www.qovery.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Qovery\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Qovery","nav":{"global":null,"tabs":[{"tab":"Getting Started","icon":"rocket","pages":[{"title":"Getting Started","href":"/getting-started/introduction"}]},{"tab":"Configuration","icon":"sliders","groups":[{"group":"Overview","pages":[{"title":"Configuration Overview","href":"/configuration/overview"}]},{"group":"Account \u0026 Organization","pages":[{"title":"User Account","href":"/configuration/user-account"},{"title":"Organization","href":"/configuration/organization"},{"group":"Access \u0026 Security","pages":[{"title":"Members \u0026 RBAC","href":"/configuration/organization/members-rbac"},{"title":"SSO (SAML/OIDC)","href":"/configuration/organization/sso"},{"title":"API Token","href":"/configuration/organization/api-token"},{"title":"API Policy Token (Preview)","href":"/configuration/organization/api-policy-token"}]}]},{"group":"Clusters \u0026 Cloud","pages":[{"title":"Clusters","href":"/configuration/clusters"},{"title":"Cluster Advanced Settings","href":"/configuration/cluster-advanced-settings"},{"title":"Connect to Your Cluster","href":"/configuration/connect-to-cluster"},{"title":"Cloud Credentials","href":"/configuration/organization/cloud-credentials"},{"title":"Cloud Provider Resource Tags","href":"/configuration/cloud-provider-resource-tags"},{"group":"AWS EKS","pages":[{"title":"AWS EKS Integration","href":"/configuration/integrations/kubernetes/eks/overview"},{"title":"AWS EKS","href":"/configuration/integrations/kubernetes/eks/managed"},{"title":"AWS Cluster Preflight Checks","href":"/configuration/integrations/kubernetes/eks/preflight-checks"},{"title":"AWS EKS Anywhere","href":"/configuration/integrations/kubernetes/eks/eks-anywhere"}]},{"group":"Google GKE","pages":[{"title":"Google GKE Integration","href":"/configuration/integrations/kubernetes/gke/overview"},{"title":"Qovery-Managed GKE","href":"/configuration/integrations/kubernetes/gke/managed"}]},{"group":"Azure AKS","pages":[{"title":"Azure AKS Integration","href":"/configuration/integrations/kubernetes/aks/overview"},{"title":"Qovery-Managed AKS","href":"/configuration/integrations/kubernetes/aks/managed"}]},{"group":"Scaleway Kapsule","pages":[{"title":"Scaleway Kapsule Integration","href":"/configuration/integrations/kubernetes/scaleway/overview"},{"title":"Qovery-Managed Scaleway Kapsule","href":"/configuration/integrations/kubernetes/scaleway/managed"}]},{"group":"Other Kubernetes","pages":[{"title":"Bring Your Own Kubernetes (BYOK)","tag":"PREVIEW","href":"/configuration/integrations/kubernetes/byok"},{"title":"Local Cluster for Development","href":"/configuration/integrations/kubernetes/docker"}]}]},{"group":"Source Control","pages":[{"title":"Git Repository Access","href":"/configuration/organization/git-repository-access"},{"group":"Container Registries","pages":[{"title":"Container Registry","href":"/configuration/organization/container-registry"},{"title":"Docker Hub","href":"/configuration/integrations/container-registries/docker-hub"},{"group":"Cloud Registries","pages":[{"title":"AWS ECR","href":"/configuration/integrations/container-registries/aws-ecr"},{"title":"GCP Artifact Registry","href":"/configuration/integrations/container-registries/gcp-artifact-registry"},{"title":"Azure Container Registry","href":"/configuration/integrations/container-registries/azure-acr"},{"title":"Scaleway Container Registry","href":"/configuration/integrations/container-registries/scaleway-cr"}]},{"group":"Git-based Registries","pages":[{"title":"GitHub Container Registry","href":"/configuration/integrations/container-registries/github-cr"},{"title":"GitLab Container Registry","href":"/configuration/integrations/container-registries/gitlab-cr"}]},{"title":"Generic Container Registry","href":"/configuration/integrations/container-registries/generic"}]},{"group":"Helm Repositories","pages":[{"title":"Helm Repository","href":"/configuration/organization/helm-repository"}]}]},{"group":"Projects \u0026 Environments","pages":[{"title":"Project","href":"/configuration/project"},{"title":"Environment","description":"Configure and manage environments for your applications","href":"/configuration/environment"}]},{"group":"Services","pages":[{"group":"Workloads","pages":[{"title":"Application","href":"/configuration/application"},{"title":"Helm Charts","description":"Deploy and manage Helm charts on Qovery","href":"/configuration/helm"}]},{"group":"Jobs","pages":[{"title":"Cron Jobs","href":"/configuration/cronjob"},{"title":"Lifecycle Jobs","href":"/configuration/lifecycle-job"}]},{"group":"Agent Tasks","tag":"NEW","pages":[{"title":"Agent Tasks","tag":"NEW","href":"/configuration/agent-tasks/overview"},{"group":"Examples","pages":[{"title":"Incident Analyzer with incident.io","href":"/configuration/agent-tasks/incident-analyser"},{"title":"Incident Analyzer with Honeybadger","href":"/configuration/agent-tasks/incident-analyser-honeybadger"},{"title":"Build \u0026 Deployment Optimizer","href":"/configuration/agent-tasks/build-deployment-optimizer"},{"title":"Jira Coding Agent","href":"/configuration/agent-tasks/jira-coding-agent"},{"title":"Linear Coding Agent","href":"/configuration/agent-tasks/linear-coding-agent"}]}]},{"group":"Data \u0026 Infrastructure","pages":[{"title":"Databases","href":"/configuration/database"},{"title":"Object Storage","href":"/configuration/object-storage"},{"title":"Terraform","href":"/configuration/terraform"}]},{"title":"Blueprints","href":"/configuration/blueprints"},{"title":"Service Health Checks","href":"/configuration/service-health-checks"},{"title":"Service Advanced Settings","href":"/configuration/service-advanced-settings"}]},{"group":"Deployment \u0026 CI/CD","pages":[{"title":"Deployment","href":"/configuration/deployment/overview"},{"title":"Deployment Pipeline","href":"/configuration/deployment/pipeline"},{"title":"Auto-Deploy","href":"/configuration/deployment/auto-deploy"},{"group":"Deployment Configuration","pages":[{"title":"Deployment Actions","href":"/configuration/deployment/actions"},{"title":"Deployment Strategies","href":"/configuration/deployment/strategies"},{"title":"Image Mirroring","href":"/configuration/deployment/image-mirroring"},{"title":"Deployment Rules","href":"/configuration/deployment-rule"}]},{"group":"Monitoring Deployments","pages":[{"title":"Running and Deployment Statuses","href":"/configuration/deployment/statuses"},{"title":"Logs","href":"/configuration/deployment/logs"},{"title":"Deployment History","href":"/configuration/deployment/history"}]},{"group":"CI/CD Integrations","pages":[{"title":"GitHub Actions","href":"/configuration/integrations/ci-cd/github-actions"},{"title":"GitLab CI","href":"/configuration/integrations/ci-cd/gitlab-ci"},{"title":"CircleCI","href":"/configuration/integrations/ci-cd/circleci"},{"title":"Jenkins","href":"/configuration/integrations/ci-cd/jenkins"},{"title":"ArgoCD Integration","href":"/configuration/integrations/argocd"}]}]},{"group":"Environment Variables \u0026 Secrets","pages":[{"title":"Environment Variables","href":"/configuration/environment-variables"},{"title":"Doppler","href":"/configuration/integrations/secret-managers/doppler"},{"group":"Secret Manager Integration","tag":"NEW","pages":[{"title":"Overview","tag":"NEW","href":"/configuration/integrations/secret-managers/secret-manager-access"},{"title":"AWS Secrets Manager","href":"/configuration/integrations/secret-managers/aws-secrets-manager"},{"title":"AWS Parameter Store","href":"/configuration/integrations/secret-managers/aws-parameter-store"},{"title":"GCP Secret Manager","href":"/configuration/integrations/secret-managers/gcp-secret-manager"}]}]},{"group":"Observability","pages":[{"title":"Qovery Observe","href":"/configuration/integrations/observability/qovery-observe"},{"title":"Datadog Integration","href":"/configuration/integrations/observability/datadog"},{"title":"Kubecost","href":"/configuration/integrations/observability/kubecost"}]},{"group":"Notifications","pages":[{"title":"Webhooks","href":"/configuration/integrations/webhooks"},{"title":"Slack Integration","href":"/configuration/integrations/slack"},{"title":"Email Integration","href":"/configuration/integrations/email"}]},{"group":"Networking \u0026 Advanced","pages":[{"group":"Networking","pages":[{"title":"VPC Peering","href":"/configuration/integrations/aws/vpc-peering"},{"title":"Use the ECR Pull Through Cache on Your Existing VPC","href":"/configuration/integrations/aws/ecr-pull-through-cache-existing-vpc"},{"title":"API Gateway with NGINX","href":"/configuration/integrations/api-gateway-nginx"}]},{"group":"Advanced Configuration","pages":[{"title":"Labels \u0026 Annotations","href":"/configuration/organization/labels-annotations"},{"title":"Disaster Recovery","href":"/configuration/disaster-recovery"}]},{"group":"Infrastructure as Code","pages":[{"title":"Infrastructure as Code","href":"/configuration/integrations/iac/overview"},{"title":"Terraform","href":"/configuration/integrations/iac/terraform"},{"title":"CloudFormation","href":"/configuration/integrations/iac/cloudformation"}]}]}]},{"tab":"AI","icon":"robot","pages":[{"title":"AI","href":"/copilot/ai-overview"}]},{"tab":"Terraform Provider","icon":"code","pages":[{"title":"Terraform Provider","href":"/terraform-provider/overview"}]},{"tab":"CLI","icon":"terminal","pages":[{"title":"CLI","href":"/cli/overview"}]},{"tab":"API Reference","icon":"brackets-curly","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Application - Qovery","buildId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","deploymentId":"dpl_BSPUBxEoKhhK7HzXVDPxdPvWx4xc","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DRxXE_WT.js","DynamicMarkdown-AlxJK8VR.js","zoom-image-lightbox-B_-GSaTf.js","lightbox-handle-r17bVUz3.js"]}