コンテンツにスキップ
Docs Try Aspire
Docs Try

Azure Container App Jobs

このコンテンツはまだ日本語訳がありません。

Azure Container Apps logo

Azure Container Apps jobs let you run containerized tasks that execute for a finite duration and exit. Unlike continuously-running Container Apps, jobs are purpose-built for batch processing, scheduled tasks, and event-driven workloads. The Aspire Azure Container App Jobs hosting integration exposes PublishAsAzureContainerAppJob and PublishAsScheduledAzureContainerAppJob extension methods so you can declare any ProjectResource, ContainerResource, or ExecutableResource as an Azure Container App Job directly from your AppHost.

The following resource types can be published as Azure Container App Jobs:

Resource typeDescription
ProjectResourceA .NET project added via AddProject<T>.
ContainerResourceA container image added via AddContainer.
ExecutableResourceAn executable process added via AddExecutable.

Use PublishAsAzureContainerAppJob to deploy a project, container, or executable as an Azure Container App Job. Use PublishAsScheduledAzureContainerAppJob as a convenience wrapper that sets the cron schedule in one call.

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.DataProcessor>("data-processor")
.PublishAsScheduledAzureContainerAppJob("0 0 * * *"); // Every day at midnight

Azure Container App Jobs support three trigger types: manual, schedule, and event.

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.ManualTask>("manual-task")
.PublishAsAzureContainerAppJob((_, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Manual;
});
C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.ScheduledTask>("scheduled-task")
.PublishAsAzureContainerAppJob((_, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Schedule;
job.Configuration.ScheduleTriggerConfig.CronExpression = "0 */6 * * *"; // Every 6 hours
job.Configuration.ScheduleTriggerConfig.Parallelism = 1;
job.Configuration.ScheduleTriggerConfig.ReplicaCompletionCount = 1;
});
C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.EventDrivenTask>("event-task")
.PublishAsAzureContainerAppJob((_, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Event;
job.Configuration.EventTriggerConfig.Scale.MinExecutions = 1;
job.Configuration.EventTriggerConfig.Scale.MaxExecutions = 10;
job.Configuration.EventTriggerConfig.Parallelism = 1;
job.Configuration.EventTriggerConfig.ReplicaCompletionCount = 1;
});

Configure CPU and memory for your job:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.ResourceIntensiveTask>("intensive-task")
.PublishAsAzureContainerAppJob((_, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Manual;
job.Template.Containers[0].Value!.Resources.Cpu = 1.0;
job.Template.Containers[0].Value!.Resources.Memory = "2Gi";
});

Pass environment variables — including provisioning parameters — into the job container:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var connectionString = builder.AddParameter("connectionString");
builder.AddProject<Projects.DatabaseTask>("db-task")
.PublishAsAzureContainerAppJob((infra, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Manual;
job.Template.Containers[0].Value!.Env.Add(new ContainerAppEnvironmentVariable
{
Name = "ConnectionString",
Value = connectionString.AsProvisioningParameter(infra)
});
});
C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.RetryableTask>("retryable-task")
.PublishAsAzureContainerAppJob((_, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Manual;
job.Configuration.ReplicaTimeout = 1800; // 30 minutes
job.Configuration.ReplicaRetryLimit = 3;
});
C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("batch-processor", "myregistry.azurecr.io/batch-processor:latest")
.PublishAsAzureContainerAppJob((_, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Schedule;
job.Configuration.ScheduleTriggerConfig.CronExpression = "0 2 * * 0"; // Weekly on Sunday at 2 AM
});
C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddExecutable("data-script", "python", ".", "process_data.py")
.PublishAsAzureContainerAppJob((_, job) =>
{
job.Configuration.TriggerType = ContainerAppJobTriggerType.Manual;
});