New to Kestra?
Use blueprints to kickstart your first workflows.
Audits AWS App Runner active container instances and concurrency metrics to detect autoscaling saturation and notify platform teams via Slack.
Audits AWS App Runner regional container services for active instance exhaustion and concurrent request saturation.
AWS/AppRunner metric namespace for ActiveInstances and Concurrency.If condition.flowchart TD
A[Schedule Trigger: 15 * * * *] --> B[Task: evaluate_apprunner_scaling]
B --> C{Task: check_scaling_saturation}
C -- Threshold Breached --> D[Task: notify_slack_saturation_alert]
C -- Nominal Operation --> E[Task: log_healthy_scaling_state]
D --> F[Task: export_scaling_manifest]
E --> F
AWS App Runner manages automatic instance scaling internally, but provides no native alert when a service reaches its configured MaxSize limit. Without external monitoring, services silently queue incoming requests when traffic surges past provisioned bounds. Kestra provides a scheduled, declarative sentinel with credential isolation, automated conditional branching, and instant multi-channel alerting without maintaining heavy monitoring servers.
MaxSize instance limit during traffic spikes.| Name | Type | Default | Description |
|---|---|---|---|
awsRegion |
STRING |
us-east-1 |
Target AWS region hosting App Runner services. |
serviceArn |
STRING |
arn:aws:apprunner:... |
Amazon Resource Name (ARN) of the App Runner service to audit. |
maxActiveInstancesThreshold |
INT |
20 |
Maximum active container instance count threshold before flagging autoscaling saturation. |
requestConcurrencyThreshold |
FLOAT |
80.0 |
Average concurrent requests per active instance triggering scaling alerts. |
slackWebhookUri |
SECRET |
None |
Encrypted Slack Incoming Webhook endpoint for alerting platform SRE teams. |
Primary execution outputs exported by export_scaling_manifest:
service_name: Parsed identifier of the App Runner service.active_instances: Maximum active container instances recorded in the evaluation window.avg_concurrency: Mean request concurrency per container instance.is_saturated: Boolean flag indicating whether scaling thresholds were breached.recommended_action: Exact AWS CLI command to adjust autoscaling configuration.Example expression: {{ outputs.export_scaling_manifest.value.is_saturated }}
apprunner:DescribeService and cloudwatch:GetMetricData permissions.AWS_ACCESS_KEY_ID: AWS IAM access key ID.AWS_SECRET_ACCESS_KEY: AWS IAM secret access key.SLACK_WEBHOOK_URL: Slack Incoming Webhook URL.AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY secrets are registered in Kestra.serviceArn to the target App Runner service ARN you wish to monitor.Concurrency metrics report empty. The Python task handles empty datasets gracefully by defaulting to zero.apprunner:UpdateService and bind a higher-capacity AutoScalingConfigurationArn.apprunner.list_services to audit every App Runner service in the AWS region sequentially.