Configure Azure SAP ACSS Backup Connections

The azure-native:workloads:ACSSBackupConnection resource, part of the Pulumi Azure Native provider, connects SAP workloads (HANA databases, SQL Server instances, or Azure VMs) to Azure Backup through Recovery Services vaults and backup policies. This guide focuses on three capabilities: multi-tier retention policies for database and VM backups, archive tiering for cost optimization, and vault and policy reuse patterns.

Backup connections reference existing SAP workloads, Recovery Services vaults, and optionally existing backup policies. The examples are intentionally small. Combine them with your own SAP infrastructure, vault configuration, and compliance requirements.

Configure HANA database backup with multi-tier retention

SAP HANA deployments require backup strategies that balance recovery point objectives with long-term compliance needs. Teams configure full, differential, and log backups with distinct schedules and retention periods.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const acssBackupConnection = new azure_native.workloads.ACSSBackupConnection("acssBackupConnection", {
    backupData: {
        backupPolicy: {
            backupManagementType: "AzureWorkload",
            name: "defaultHanaPolicy",
            protectedItemsCount: 0,
            settings: {
                isCompression: false,
                issqlcompression: false,
                timeZone: "UTC",
            },
            subProtectionPolicy: [
                {
                    policyType: azure_native.workloads.PolicyType.Full,
                    retentionPolicy: {
                        monthlySchedule: {
                            retentionDuration: {
                                count: 60,
                                durationType: azure_native.workloads.RetentionDurationType.Months,
                            },
                            retentionScheduleFormatType: azure_native.workloads.RetentionScheduleFormat.Weekly,
                            retentionScheduleWeekly: {
                                daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                                weeksOfTheMonth: [azure_native.workloads.WeekOfMonth.First],
                            },
                            retentionTimes: ["2022-11-29T19:30:00.000Z"],
                        },
                        retentionPolicyType: "LongTermRetentionPolicy",
                        weeklySchedule: {
                            daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                            retentionDuration: {
                                count: 104,
                                durationType: azure_native.workloads.RetentionDurationType.Weeks,
                            },
                            retentionTimes: ["2022-11-29T19:30:00.000Z"],
                        },
                        yearlySchedule: {
                            monthsOfYear: [azure_native.workloads.MonthOfYear.January],
                            retentionDuration: {
                                count: 10,
                                durationType: azure_native.workloads.RetentionDurationType.Years,
                            },
                            retentionScheduleFormatType: azure_native.workloads.RetentionScheduleFormat.Weekly,
                            retentionScheduleWeekly: {
                                daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                                weeksOfTheMonth: [azure_native.workloads.WeekOfMonth.First],
                            },
                            retentionTimes: ["2022-11-29T19:30:00.000Z"],
                        },
                    },
                    schedulePolicy: {
                        schedulePolicyType: "SimpleSchedulePolicy",
                        scheduleRunDays: [azure_native.workloads.DayOfWeek.Sunday],
                        scheduleRunFrequency: azure_native.workloads.ScheduleRunType.Weekly,
                        scheduleRunTimes: ["2022-11-29T19:30:00.000Z"],
                    },
                    tieringPolicy: {
                        ArchivedRP: {
                            tieringMode: azure_native.workloads.TieringMode.DoNotTier,
                        },
                    },
                },
                {
                    policyType: azure_native.workloads.PolicyType.Differential,
                    retentionPolicy: {
                        retentionDuration: {
                            count: 30,
                            durationType: azure_native.workloads.RetentionDurationType.Days,
                        },
                        retentionPolicyType: "SimpleRetentionPolicy",
                    },
                    schedulePolicy: {
                        schedulePolicyType: "SimpleSchedulePolicy",
                        scheduleRunDays: [azure_native.workloads.DayOfWeek.Monday],
                        scheduleRunFrequency: azure_native.workloads.ScheduleRunType.Weekly,
                        scheduleRunTimes: ["2022-09-29T02:00:00Z"],
                        scheduleWeeklyFrequency: 0,
                    },
                },
                {
                    policyType: azure_native.workloads.PolicyType.Log,
                    retentionPolicy: {
                        retentionDuration: {
                            count: 20,
                            durationType: azure_native.workloads.RetentionDurationType.Days,
                        },
                        retentionPolicyType: "SimpleRetentionPolicy",
                    },
                    schedulePolicy: {
                        scheduleFrequencyInMins: 120,
                        schedulePolicyType: "LogSchedulePolicy",
                    },
                },
            ],
            workLoadType: azure_native.workloads.WorkloadType.SAPHanaDatabase,
        },
        backupType: "HANA",
        dbInstanceSnapshotBackupPolicy: {
            backupManagementType: "AzureWorkload",
            name: "defaultDbInstanceSnapshotPolicy",
            settings: {
                isCompression: false,
                issqlcompression: false,
                timeZone: "UTC",
            },
            subProtectionPolicy: [{
                policyType: azure_native.workloads.PolicyType.SnapshotFull,
                schedulePolicy: {
                    schedulePolicyType: "SimpleSchedulePolicy",
                    scheduleRunFrequency: azure_native.workloads.ScheduleRunType.Daily,
                    scheduleRunTimes: ["2023-09-18T06:30:00.000Z"],
                },
                snapshotBackupAdditionalDetails: {
                    instantRPDetails: "test-rg",
                    instantRpRetentionRangeInDays: 1,
                    userAssignedManagedIdentityDetails: {
                        identityArmId: "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourcegroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testMsi",
                        identityName: "testMsi",
                        userAssignedIdentityProperties: {
                            clientId: "c3a877cf-51f8-4031-8f17-ab562d1e7737",
                            principalId: "2f5834bd-4b86-4d85-a8df-6dd829a6418c",
                        },
                    },
                },
            }],
            workLoadType: azure_native.workloads.WorkloadType.SAPHanaDBInstance,
        },
        hdbuserstoreKeyName: "abcd",
        instanceNumber: "00",
        recoveryServicesVault: {
            name: "test-vault",
            resourceGroup: "test-rg",
            vaultType: "New",
        },
        sslConfiguration: {
            sslCryptoProvider: azure_native.workloads.SslCryptoProvider.Commoncrypto,
            sslHostNameInCertificate: "hostname",
            sslKeyStore: "sapsrv.pse",
            sslTrustStore: "sapsrv.pse",
        },
    },
    backupName: "dbBackup",
    connectorName: "C1",
    location: "westcentralus",
    resourceGroupName: "test-rg",
    tags: {},
});
import pulumi
import pulumi_azure_native as azure_native

acss_backup_connection = azure_native.workloads.ACSSBackupConnection("acssBackupConnection",
    backup_data={
        "backup_policy": {
            "backup_management_type": "AzureWorkload",
            "name": "defaultHanaPolicy",
            "protected_items_count": 0,
            "settings": {
                "is_compression": False,
                "issqlcompression": False,
                "time_zone": "UTC",
            },
            "sub_protection_policy": [
                {
                    "policy_type": azure_native.workloads.PolicyType.FULL,
                    "retention_policy": {
                        "monthly_schedule": {
                            "retention_duration": {
                                "count": 60,
                                "duration_type": azure_native.workloads.RetentionDurationType.MONTHS,
                            },
                            "retention_schedule_format_type": azure_native.workloads.RetentionScheduleFormat.WEEKLY,
                            "retention_schedule_weekly": {
                                "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                                "weeks_of_the_month": [azure_native.workloads.WeekOfMonth.FIRST],
                            },
                            "retention_times": ["2022-11-29T19:30:00.000Z"],
                        },
                        "retention_policy_type": "LongTermRetentionPolicy",
                        "weekly_schedule": {
                            "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                            "retention_duration": {
                                "count": 104,
                                "duration_type": azure_native.workloads.RetentionDurationType.WEEKS,
                            },
                            "retention_times": ["2022-11-29T19:30:00.000Z"],
                        },
                        "yearly_schedule": {
                            "months_of_year": [azure_native.workloads.MonthOfYear.JANUARY],
                            "retention_duration": {
                                "count": 10,
                                "duration_type": azure_native.workloads.RetentionDurationType.YEARS,
                            },
                            "retention_schedule_format_type": azure_native.workloads.RetentionScheduleFormat.WEEKLY,
                            "retention_schedule_weekly": {
                                "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                                "weeks_of_the_month": [azure_native.workloads.WeekOfMonth.FIRST],
                            },
                            "retention_times": ["2022-11-29T19:30:00.000Z"],
                        },
                    },
                    "schedule_policy": {
                        "schedule_policy_type": "SimpleSchedulePolicy",
                        "schedule_run_days": [azure_native.workloads.DayOfWeek.SUNDAY],
                        "schedule_run_frequency": azure_native.workloads.ScheduleRunType.WEEKLY,
                        "schedule_run_times": ["2022-11-29T19:30:00.000Z"],
                    },
                    "tiering_policy": {
                        "ArchivedRP": {
                            "tiering_mode": azure_native.workloads.TieringMode.DO_NOT_TIER,
                        },
                    },
                },
                {
                    "policy_type": azure_native.workloads.PolicyType.DIFFERENTIAL,
                    "retention_policy": {
                        "retention_duration": {
                            "count": 30,
                            "duration_type": azure_native.workloads.RetentionDurationType.DAYS,
                        },
                        "retention_policy_type": "SimpleRetentionPolicy",
                    },
                    "schedule_policy": {
                        "schedule_policy_type": "SimpleSchedulePolicy",
                        "schedule_run_days": [azure_native.workloads.DayOfWeek.MONDAY],
                        "schedule_run_frequency": azure_native.workloads.ScheduleRunType.WEEKLY,
                        "schedule_run_times": ["2022-09-29T02:00:00Z"],
                        "schedule_weekly_frequency": 0,
                    },
                },
                {
                    "policy_type": azure_native.workloads.PolicyType.LOG,
                    "retention_policy": {
                        "retention_duration": {
                            "count": 20,
                            "duration_type": azure_native.workloads.RetentionDurationType.DAYS,
                        },
                        "retention_policy_type": "SimpleRetentionPolicy",
                    },
                    "schedule_policy": {
                        "schedule_frequency_in_mins": 120,
                        "schedule_policy_type": "LogSchedulePolicy",
                    },
                },
            ],
            "work_load_type": azure_native.workloads.WorkloadType.SAP_HANA_DATABASE,
        },
        "backup_type": "HANA",
        "db_instance_snapshot_backup_policy": {
            "backup_management_type": "AzureWorkload",
            "name": "defaultDbInstanceSnapshotPolicy",
            "settings": {
                "is_compression": False,
                "issqlcompression": False,
                "time_zone": "UTC",
            },
            "sub_protection_policy": [{
                "policy_type": azure_native.workloads.PolicyType.SNAPSHOT_FULL,
                "schedule_policy": {
                    "schedule_policy_type": "SimpleSchedulePolicy",
                    "schedule_run_frequency": azure_native.workloads.ScheduleRunType.DAILY,
                    "schedule_run_times": ["2023-09-18T06:30:00.000Z"],
                },
                "snapshot_backup_additional_details": {
                    "instant_rp_details": "test-rg",
                    "instant_rp_retention_range_in_days": 1,
                    "user_assigned_managed_identity_details": {
                        "identity_arm_id": "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourcegroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testMsi",
                        "identity_name": "testMsi",
                        "user_assigned_identity_properties": {
                            "client_id": "c3a877cf-51f8-4031-8f17-ab562d1e7737",
                            "principal_id": "2f5834bd-4b86-4d85-a8df-6dd829a6418c",
                        },
                    },
                },
            }],
            "work_load_type": azure_native.workloads.WorkloadType.SAP_HANA_DB_INSTANCE,
        },
        "hdbuserstore_key_name": "abcd",
        "instance_number": "00",
        "recovery_services_vault": {
            "name": "test-vault",
            "resource_group": "test-rg",
            "vault_type": "New",
        },
        "ssl_configuration": {
            "ssl_crypto_provider": azure_native.workloads.SslCryptoProvider.COMMONCRYPTO,
            "ssl_host_name_in_certificate": "hostname",
            "ssl_key_store": "sapsrv.pse",
            "ssl_trust_store": "sapsrv.pse",
        },
    },
    backup_name="dbBackup",
    connector_name="C1",
    location="westcentralus",
    resource_group_name="test-rg",
    tags={})
package main

import (
	workloads "github.com/pulumi/pulumi-azure-native-sdk/workloads/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := workloads.NewACSSBackupConnection(ctx, "acssBackupConnection", &workloads.ACSSBackupConnectionArgs{
			BackupData: &workloads.HanaBackupDataArgs{
				BackupPolicy: &workloads.DBBackupPolicyPropertiesArgs{
					BackupManagementType: pulumi.String("AzureWorkload"),
					Name:                 pulumi.String("defaultHanaPolicy"),
					ProtectedItemsCount:  pulumi.Int(0),
					Settings: &workloads.SettingsArgs{
						IsCompression:    pulumi.Bool(false),
						Issqlcompression: pulumi.Bool(false),
						TimeZone:         pulumi.String("UTC"),
					},
					SubProtectionPolicy: workloads.SubProtectionPolicyArray{
						&workloads.SubProtectionPolicyArgs{
							PolicyType: pulumi.String(workloads.PolicyTypeFull),
							RetentionPolicy: workloads.LongTermRetentionPolicy{
								MonthlySchedule: workloads.MonthlyRetentionSchedule{
									RetentionDuration: workloads.RetentionDuration{
										Count:        60,
										DurationType: workloads.RetentionDurationTypeMonths,
									},
									RetentionScheduleFormatType: workloads.RetentionScheduleFormatWeekly,
									RetentionScheduleWeekly: workloads.WeeklyRetentionFormat{
										DaysOfTheWeek: []workloads.DayOfWeek{
											workloads.DayOfWeekSunday,
										},
										WeeksOfTheMonth: []workloads.WeekOfMonth{
											workloads.WeekOfMonthFirst,
										},
									},
									RetentionTimes: []string{
										"2022-11-29T19:30:00.000Z",
									},
								},
								RetentionPolicyType: "LongTermRetentionPolicy",
								WeeklySchedule: workloads.WeeklyRetentionSchedule{
									DaysOfTheWeek: []workloads.DayOfWeek{
										workloads.DayOfWeekSunday,
									},
									RetentionDuration: workloads.RetentionDuration{
										Count:        104,
										DurationType: workloads.RetentionDurationTypeWeeks,
									},
									RetentionTimes: []string{
										"2022-11-29T19:30:00.000Z",
									},
								},
								YearlySchedule: workloads.YearlyRetentionSchedule{
									MonthsOfYear: []workloads.MonthOfYear{
										workloads.MonthOfYearJanuary,
									},
									RetentionDuration: workloads.RetentionDuration{
										Count:        10,
										DurationType: workloads.RetentionDurationTypeYears,
									},
									RetentionScheduleFormatType: workloads.RetentionScheduleFormatWeekly,
									RetentionScheduleWeekly: workloads.WeeklyRetentionFormat{
										DaysOfTheWeek: []workloads.DayOfWeek{
											workloads.DayOfWeekSunday,
										},
										WeeksOfTheMonth: []workloads.WeekOfMonth{
											workloads.WeekOfMonthFirst,
										},
									},
									RetentionTimes: []string{
										"2022-11-29T19:30:00.000Z",
									},
								},
							},
							SchedulePolicy: workloads.SimpleSchedulePolicy{
								SchedulePolicyType: "SimpleSchedulePolicy",
								ScheduleRunDays: []workloads.DayOfWeek{
									workloads.DayOfWeekSunday,
								},
								ScheduleRunFrequency: workloads.ScheduleRunTypeWeekly,
								ScheduleRunTimes: []string{
									"2022-11-29T19:30:00.000Z",
								},
							},
							TieringPolicy: workloads.TieringPolicyMap{
								"ArchivedRP": &workloads.TieringPolicyArgs{
									TieringMode: pulumi.String(workloads.TieringModeDoNotTier),
								},
							},
						},
						&workloads.SubProtectionPolicyArgs{
							PolicyType: pulumi.String(workloads.PolicyTypeDifferential),
							RetentionPolicy: workloads.SimpleRetentionPolicy{
								RetentionDuration: workloads.RetentionDuration{
									Count:        30,
									DurationType: workloads.RetentionDurationTypeDays,
								},
								RetentionPolicyType: "SimpleRetentionPolicy",
							},
							SchedulePolicy: workloads.SimpleSchedulePolicy{
								SchedulePolicyType: "SimpleSchedulePolicy",
								ScheduleRunDays: []workloads.DayOfWeek{
									workloads.DayOfWeekMonday,
								},
								ScheduleRunFrequency: workloads.ScheduleRunTypeWeekly,
								ScheduleRunTimes: []string{
									"2022-09-29T02:00:00Z",
								},
								ScheduleWeeklyFrequency: 0,
							},
						},
						&workloads.SubProtectionPolicyArgs{
							PolicyType: pulumi.String(workloads.PolicyTypeLog),
							RetentionPolicy: workloads.SimpleRetentionPolicy{
								RetentionDuration: workloads.RetentionDuration{
									Count:        20,
									DurationType: workloads.RetentionDurationTypeDays,
								},
								RetentionPolicyType: "SimpleRetentionPolicy",
							},
							SchedulePolicy: workloads.LogSchedulePolicy{
								ScheduleFrequencyInMins: 120,
								SchedulePolicyType:      "LogSchedulePolicy",
							},
						},
					},
					WorkLoadType: pulumi.String(workloads.WorkloadTypeSAPHanaDatabase),
				},
				BackupType: pulumi.String("HANA"),
				DbInstanceSnapshotBackupPolicy: &workloads.DBBackupPolicyPropertiesArgs{
					BackupManagementType: pulumi.String("AzureWorkload"),
					Name:                 pulumi.String("defaultDbInstanceSnapshotPolicy"),
					Settings: &workloads.SettingsArgs{
						IsCompression:    pulumi.Bool(false),
						Issqlcompression: pulumi.Bool(false),
						TimeZone:         pulumi.String("UTC"),
					},
					SubProtectionPolicy: workloads.SubProtectionPolicyArray{
						&workloads.SubProtectionPolicyArgs{
							PolicyType: pulumi.String(workloads.PolicyTypeSnapshotFull),
							SchedulePolicy: workloads.SimpleSchedulePolicy{
								SchedulePolicyType:   "SimpleSchedulePolicy",
								ScheduleRunFrequency: workloads.ScheduleRunTypeDaily,
								ScheduleRunTimes: []string{
									"2023-09-18T06:30:00.000Z",
								},
							},
							SnapshotBackupAdditionalDetails: &workloads.SnapshotBackupAdditionalDetailsArgs{
								InstantRPDetails:              pulumi.String("test-rg"),
								InstantRpRetentionRangeInDays: pulumi.Int(1),
								UserAssignedManagedIdentityDetails: &workloads.UserAssignedManagedIdentityDetailsArgs{
									IdentityArmId: pulumi.String("/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourcegroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testMsi"),
									IdentityName:  pulumi.String("testMsi"),
									UserAssignedIdentityProperties: &workloads.UserAssignedIdentityPropertiesArgs{
										ClientId:    pulumi.String("c3a877cf-51f8-4031-8f17-ab562d1e7737"),
										PrincipalId: pulumi.String("2f5834bd-4b86-4d85-a8df-6dd829a6418c"),
									},
								},
							},
						},
					},
					WorkLoadType: pulumi.String(workloads.WorkloadTypeSAPHanaDBInstance),
				},
				HdbuserstoreKeyName: pulumi.String("abcd"),
				InstanceNumber:      pulumi.String("00"),
				RecoveryServicesVault: workloads.NewRecoveryServicesVault{
					Name:          "test-vault",
					ResourceGroup: "test-rg",
					VaultType:     "New",
				},
				SslConfiguration: &workloads.SSLConfigurationArgs{
					SslCryptoProvider:        pulumi.String(workloads.SslCryptoProviderCommoncrypto),
					SslHostNameInCertificate: pulumi.String("hostname"),
					SslKeyStore:              pulumi.String("sapsrv.pse"),
					SslTrustStore:            pulumi.String("sapsrv.pse"),
				},
			},
			BackupName:        pulumi.String("dbBackup"),
			ConnectorName:     pulumi.String("C1"),
			Location:          pulumi.String("westcentralus"),
			ResourceGroupName: pulumi.String("test-rg"),
			Tags:              pulumi.StringMap{},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var acssBackupConnection = new AzureNative.Workloads.ACSSBackupConnection("acssBackupConnection", new()
    {
        BackupData = new AzureNative.Workloads.Inputs.HanaBackupDataArgs
        {
            BackupPolicy = new AzureNative.Workloads.Inputs.DBBackupPolicyPropertiesArgs
            {
                BackupManagementType = "AzureWorkload",
                Name = "defaultHanaPolicy",
                ProtectedItemsCount = 0,
                Settings = new AzureNative.Workloads.Inputs.SettingsArgs
                {
                    IsCompression = false,
                    Issqlcompression = false,
                    TimeZone = "UTC",
                },
                SubProtectionPolicy = new[]
                {
                    new AzureNative.Workloads.Inputs.SubProtectionPolicyArgs
                    {
                        PolicyType = AzureNative.Workloads.PolicyType.Full,
                        RetentionPolicy = new AzureNative.Workloads.Inputs.LongTermRetentionPolicyArgs
                        {
                            MonthlySchedule = new AzureNative.Workloads.Inputs.MonthlyRetentionScheduleArgs
                            {
                                RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                                {
                                    Count = 60,
                                    DurationType = AzureNative.Workloads.RetentionDurationType.Months,
                                },
                                RetentionScheduleFormatType = AzureNative.Workloads.RetentionScheduleFormat.Weekly,
                                RetentionScheduleWeekly = new AzureNative.Workloads.Inputs.WeeklyRetentionFormatArgs
                                {
                                    DaysOfTheWeek = new[]
                                    {
                                        AzureNative.Workloads.DayOfWeek.Sunday,
                                    },
                                    WeeksOfTheMonth = new[]
                                    {
                                        AzureNative.Workloads.WeekOfMonth.First,
                                    },
                                },
                                RetentionTimes = new[]
                                {
                                    "2022-11-29T19:30:00.000Z",
                                },
                            },
                            RetentionPolicyType = "LongTermRetentionPolicy",
                            WeeklySchedule = new AzureNative.Workloads.Inputs.WeeklyRetentionScheduleArgs
                            {
                                DaysOfTheWeek = new[]
                                {
                                    AzureNative.Workloads.DayOfWeek.Sunday,
                                },
                                RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                                {
                                    Count = 104,
                                    DurationType = AzureNative.Workloads.RetentionDurationType.Weeks,
                                },
                                RetentionTimes = new[]
                                {
                                    "2022-11-29T19:30:00.000Z",
                                },
                            },
                            YearlySchedule = new AzureNative.Workloads.Inputs.YearlyRetentionScheduleArgs
                            {
                                MonthsOfYear = new[]
                                {
                                    AzureNative.Workloads.MonthOfYear.January,
                                },
                                RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                                {
                                    Count = 10,
                                    DurationType = AzureNative.Workloads.RetentionDurationType.Years,
                                },
                                RetentionScheduleFormatType = AzureNative.Workloads.RetentionScheduleFormat.Weekly,
                                RetentionScheduleWeekly = new AzureNative.Workloads.Inputs.WeeklyRetentionFormatArgs
                                {
                                    DaysOfTheWeek = new[]
                                    {
                                        AzureNative.Workloads.DayOfWeek.Sunday,
                                    },
                                    WeeksOfTheMonth = new[]
                                    {
                                        AzureNative.Workloads.WeekOfMonth.First,
                                    },
                                },
                                RetentionTimes = new[]
                                {
                                    "2022-11-29T19:30:00.000Z",
                                },
                            },
                        },
                        SchedulePolicy = new AzureNative.Workloads.Inputs.SimpleSchedulePolicyArgs
                        {
                            SchedulePolicyType = "SimpleSchedulePolicy",
                            ScheduleRunDays = new[]
                            {
                                AzureNative.Workloads.DayOfWeek.Sunday,
                            },
                            ScheduleRunFrequency = AzureNative.Workloads.ScheduleRunType.Weekly,
                            ScheduleRunTimes = new[]
                            {
                                "2022-11-29T19:30:00.000Z",
                            },
                        },
                        TieringPolicy = 
                        {
                            { "ArchivedRP", new AzureNative.Workloads.Inputs.TieringPolicyArgs
                            {
                                TieringMode = AzureNative.Workloads.TieringMode.DoNotTier,
                            } },
                        },
                    },
                    new AzureNative.Workloads.Inputs.SubProtectionPolicyArgs
                    {
                        PolicyType = AzureNative.Workloads.PolicyType.Differential,
                        RetentionPolicy = new AzureNative.Workloads.Inputs.SimpleRetentionPolicyArgs
                        {
                            RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                            {
                                Count = 30,
                                DurationType = AzureNative.Workloads.RetentionDurationType.Days,
                            },
                            RetentionPolicyType = "SimpleRetentionPolicy",
                        },
                        SchedulePolicy = new AzureNative.Workloads.Inputs.SimpleSchedulePolicyArgs
                        {
                            SchedulePolicyType = "SimpleSchedulePolicy",
                            ScheduleRunDays = new[]
                            {
                                AzureNative.Workloads.DayOfWeek.Monday,
                            },
                            ScheduleRunFrequency = AzureNative.Workloads.ScheduleRunType.Weekly,
                            ScheduleRunTimes = new[]
                            {
                                "2022-09-29T02:00:00Z",
                            },
                            ScheduleWeeklyFrequency = 0,
                        },
                    },
                    new AzureNative.Workloads.Inputs.SubProtectionPolicyArgs
                    {
                        PolicyType = AzureNative.Workloads.PolicyType.Log,
                        RetentionPolicy = new AzureNative.Workloads.Inputs.SimpleRetentionPolicyArgs
                        {
                            RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                            {
                                Count = 20,
                                DurationType = AzureNative.Workloads.RetentionDurationType.Days,
                            },
                            RetentionPolicyType = "SimpleRetentionPolicy",
                        },
                        SchedulePolicy = new AzureNative.Workloads.Inputs.LogSchedulePolicyArgs
                        {
                            ScheduleFrequencyInMins = 120,
                            SchedulePolicyType = "LogSchedulePolicy",
                        },
                    },
                },
                WorkLoadType = AzureNative.Workloads.WorkloadType.SAPHanaDatabase,
            },
            BackupType = "HANA",
            DbInstanceSnapshotBackupPolicy = new AzureNative.Workloads.Inputs.DBBackupPolicyPropertiesArgs
            {
                BackupManagementType = "AzureWorkload",
                Name = "defaultDbInstanceSnapshotPolicy",
                Settings = new AzureNative.Workloads.Inputs.SettingsArgs
                {
                    IsCompression = false,
                    Issqlcompression = false,
                    TimeZone = "UTC",
                },
                SubProtectionPolicy = new[]
                {
                    new AzureNative.Workloads.Inputs.SubProtectionPolicyArgs
                    {
                        PolicyType = AzureNative.Workloads.PolicyType.SnapshotFull,
                        SchedulePolicy = new AzureNative.Workloads.Inputs.SimpleSchedulePolicyArgs
                        {
                            SchedulePolicyType = "SimpleSchedulePolicy",
                            ScheduleRunFrequency = AzureNative.Workloads.ScheduleRunType.Daily,
                            ScheduleRunTimes = new[]
                            {
                                "2023-09-18T06:30:00.000Z",
                            },
                        },
                        SnapshotBackupAdditionalDetails = new AzureNative.Workloads.Inputs.SnapshotBackupAdditionalDetailsArgs
                        {
                            InstantRPDetails = "test-rg",
                            InstantRpRetentionRangeInDays = 1,
                            UserAssignedManagedIdentityDetails = new AzureNative.Workloads.Inputs.UserAssignedManagedIdentityDetailsArgs
                            {
                                IdentityArmId = "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourcegroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testMsi",
                                IdentityName = "testMsi",
                                UserAssignedIdentityProperties = new AzureNative.Workloads.Inputs.UserAssignedIdentityPropertiesArgs
                                {
                                    ClientId = "c3a877cf-51f8-4031-8f17-ab562d1e7737",
                                    PrincipalId = "2f5834bd-4b86-4d85-a8df-6dd829a6418c",
                                },
                            },
                        },
                    },
                },
                WorkLoadType = AzureNative.Workloads.WorkloadType.SAPHanaDBInstance,
            },
            HdbuserstoreKeyName = "abcd",
            InstanceNumber = "00",
            RecoveryServicesVault = new AzureNative.Workloads.Inputs.NewRecoveryServicesVaultArgs
            {
                Name = "test-vault",
                ResourceGroup = "test-rg",
                VaultType = "New",
            },
            SslConfiguration = new AzureNative.Workloads.Inputs.SSLConfigurationArgs
            {
                SslCryptoProvider = AzureNative.Workloads.SslCryptoProvider.Commoncrypto,
                SslHostNameInCertificate = "hostname",
                SslKeyStore = "sapsrv.pse",
                SslTrustStore = "sapsrv.pse",
            },
        },
        BackupName = "dbBackup",
        ConnectorName = "C1",
        Location = "westcentralus",
        ResourceGroupName = "test-rg",
        Tags = null,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.workloads.ACSSBackupConnection;
import com.pulumi.azurenative.workloads.ACSSBackupConnectionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var acssBackupConnection = new ACSSBackupConnection("acssBackupConnection", ACSSBackupConnectionArgs.builder()
            .backupData(HanaBackupDataArgs.builder()
                .backupPolicy(Map.ofEntries(
                    Map.entry("backupManagementType", "AzureWorkload"),
                    Map.entry("name", "defaultHanaPolicy"),
                    Map.entry("protectedItemsCount", 0),
                    Map.entry("settings", SettingsArgs.builder()
                        .isCompression(false)
                        .issqlcompression(false)
                        .timeZone("UTC")
                        .build()),
                    Map.entry("subProtectionPolicy",                     
                        SubProtectionPolicyArgs.builder()
                            .policyType("Full")
                            .retentionPolicy(LongTermRetentionPolicyArgs.builder()
                                .monthlySchedule(MonthlyRetentionScheduleArgs.builder()
                                    .retentionDuration(RetentionDurationArgs.builder()
                                        .count(60)
                                        .durationType("Months")
                                        .build())
                                    .retentionScheduleFormatType("Weekly")
                                    .retentionScheduleWeekly(WeeklyRetentionFormatArgs.builder()
                                        .daysOfTheWeek("Sunday")
                                        .weeksOfTheMonth("First")
                                        .build())
                                    .retentionTimes("2022-11-29T19:30:00.000Z")
                                    .build())
                                .retentionPolicyType("LongTermRetentionPolicy")
                                .weeklySchedule(WeeklyRetentionScheduleArgs.builder()
                                    .daysOfTheWeek("Sunday")
                                    .retentionDuration(RetentionDurationArgs.builder()
                                        .count(104)
                                        .durationType("Weeks")
                                        .build())
                                    .retentionTimes("2022-11-29T19:30:00.000Z")
                                    .build())
                                .yearlySchedule(YearlyRetentionScheduleArgs.builder()
                                    .monthsOfYear("January")
                                    .retentionDuration(RetentionDurationArgs.builder()
                                        .count(10)
                                        .durationType("Years")
                                        .build())
                                    .retentionScheduleFormatType("Weekly")
                                    .retentionScheduleWeekly(WeeklyRetentionFormatArgs.builder()
                                        .daysOfTheWeek("Sunday")
                                        .weeksOfTheMonth("First")
                                        .build())
                                    .retentionTimes("2022-11-29T19:30:00.000Z")
                                    .build())
                                .build())
                            .schedulePolicy(SimpleSchedulePolicyArgs.builder()
                                .schedulePolicyType("SimpleSchedulePolicy")
                                .scheduleRunDays("Sunday")
                                .scheduleRunFrequency("Weekly")
                                .scheduleRunTimes("2022-11-29T19:30:00.000Z")
                                .build())
                            .tieringPolicy(Map.of("ArchivedRP", TieringPolicyArgs.builder()
                                .tieringMode("DoNotTier")
                                .build()))
                            .build(),
                        SubProtectionPolicyArgs.builder()
                            .policyType("Differential")
                            .retentionPolicy(SimpleRetentionPolicyArgs.builder()
                                .retentionDuration(RetentionDurationArgs.builder()
                                    .count(30)
                                    .durationType("Days")
                                    .build())
                                .retentionPolicyType("SimpleRetentionPolicy")
                                .build())
                            .schedulePolicy(SimpleSchedulePolicyArgs.builder()
                                .schedulePolicyType("SimpleSchedulePolicy")
                                .scheduleRunDays("Monday")
                                .scheduleRunFrequency("Weekly")
                                .scheduleRunTimes("2022-09-29T02:00:00Z")
                                .scheduleWeeklyFrequency(0)
                                .build())
                            .build(),
                        SubProtectionPolicyArgs.builder()
                            .policyType("Log")
                            .retentionPolicy(SimpleRetentionPolicyArgs.builder()
                                .retentionDuration(RetentionDurationArgs.builder()
                                    .count(20)
                                    .durationType("Days")
                                    .build())
                                .retentionPolicyType("SimpleRetentionPolicy")
                                .build())
                            .schedulePolicy(LogSchedulePolicyArgs.builder()
                                .scheduleFrequencyInMins(120)
                                .schedulePolicyType("LogSchedulePolicy")
                                .build())
                            .build()),
                    Map.entry("workLoadType", "SAPHanaDatabase")
                ))
                .backupType("HANA")
                .dbInstanceSnapshotBackupPolicy(Map.ofEntries(
                    Map.entry("backupManagementType", "AzureWorkload"),
                    Map.entry("name", "defaultDbInstanceSnapshotPolicy"),
                    Map.entry("settings", SettingsArgs.builder()
                        .isCompression(false)
                        .issqlcompression(false)
                        .timeZone("UTC")
                        .build()),
                    Map.entry("subProtectionPolicy", SubProtectionPolicyArgs.builder()
                        .policyType("SnapshotFull")
                        .schedulePolicy(SimpleSchedulePolicyArgs.builder()
                            .schedulePolicyType("SimpleSchedulePolicy")
                            .scheduleRunFrequency("Daily")
                            .scheduleRunTimes("2023-09-18T06:30:00.000Z")
                            .build())
                        .snapshotBackupAdditionalDetails(SnapshotBackupAdditionalDetailsArgs.builder()
                            .instantRPDetails("test-rg")
                            .instantRpRetentionRangeInDays(1)
                            .userAssignedManagedIdentityDetails(UserAssignedManagedIdentityDetailsArgs.builder()
                                .identityArmId("/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourcegroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testMsi")
                                .identityName("testMsi")
                                .userAssignedIdentityProperties(UserAssignedIdentityPropertiesArgs.builder()
                                    .clientId("c3a877cf-51f8-4031-8f17-ab562d1e7737")
                                    .principalId("2f5834bd-4b86-4d85-a8df-6dd829a6418c")
                                    .build())
                                .build())
                            .build())
                        .build()),
                    Map.entry("workLoadType", "SAPHanaDBInstance")
                ))
                .hdbuserstoreKeyName("abcd")
                .instanceNumber("00")
                .recoveryServicesVault(NewRecoveryServicesVaultArgs.builder()
                    .name("test-vault")
                    .resourceGroup("test-rg")
                    .vaultType("New")
                    .build())
                .sslConfiguration(SSLConfigurationArgs.builder()
                    .sslCryptoProvider("commoncrypto")
                    .sslHostNameInCertificate("hostname")
                    .sslKeyStore("sapsrv.pse")
                    .sslTrustStore("sapsrv.pse")
                    .build())
                .build())
            .backupName("dbBackup")
            .connectorName("C1")
            .location("westcentralus")
            .resourceGroupName("test-rg")
            .tags(Map.ofEntries(
            ))
            .build());

    }
}
resources:
  acssBackupConnection:
    type: azure-native:workloads:ACSSBackupConnection
    properties:
      backupData:
        backupPolicy:
          backupManagementType: AzureWorkload
          name: defaultHanaPolicy
          protectedItemsCount: 0
          settings:
            isCompression: false
            issqlcompression: false
            timeZone: UTC
          subProtectionPolicy:
            - policyType: Full
              retentionPolicy:
                monthlySchedule:
                  retentionDuration:
                    count: 60
                    durationType: Months
                  retentionScheduleFormatType: Weekly
                  retentionScheduleWeekly:
                    daysOfTheWeek:
                      - Sunday
                    weeksOfTheMonth:
                      - First
                  retentionTimes:
                    - 2022-11-29T19:30:00.000Z
                retentionPolicyType: LongTermRetentionPolicy
                weeklySchedule:
                  daysOfTheWeek:
                    - Sunday
                  retentionDuration:
                    count: 104
                    durationType: Weeks
                  retentionTimes:
                    - 2022-11-29T19:30:00.000Z
                yearlySchedule:
                  monthsOfYear:
                    - January
                  retentionDuration:
                    count: 10
                    durationType: Years
                  retentionScheduleFormatType: Weekly
                  retentionScheduleWeekly:
                    daysOfTheWeek:
                      - Sunday
                    weeksOfTheMonth:
                      - First
                  retentionTimes:
                    - 2022-11-29T19:30:00.000Z
              schedulePolicy:
                schedulePolicyType: SimpleSchedulePolicy
                scheduleRunDays:
                  - Sunday
                scheduleRunFrequency: Weekly
                scheduleRunTimes:
                  - 2022-11-29T19:30:00.000Z
              tieringPolicy:
                ArchivedRP:
                  tieringMode: DoNotTier
            - policyType: Differential
              retentionPolicy:
                retentionDuration:
                  count: 30
                  durationType: Days
                retentionPolicyType: SimpleRetentionPolicy
              schedulePolicy:
                schedulePolicyType: SimpleSchedulePolicy
                scheduleRunDays:
                  - Monday
                scheduleRunFrequency: Weekly
                scheduleRunTimes:
                  - 2022-09-29T02:00:00Z
                scheduleWeeklyFrequency: 0
            - policyType: Log
              retentionPolicy:
                retentionDuration:
                  count: 20
                  durationType: Days
                retentionPolicyType: SimpleRetentionPolicy
              schedulePolicy:
                scheduleFrequencyInMins: 120
                schedulePolicyType: LogSchedulePolicy
          workLoadType: SAPHanaDatabase
        backupType: HANA
        dbInstanceSnapshotBackupPolicy:
          backupManagementType: AzureWorkload
          name: defaultDbInstanceSnapshotPolicy
          settings:
            isCompression: false
            issqlcompression: false
            timeZone: UTC
          subProtectionPolicy:
            - policyType: SnapshotFull
              schedulePolicy:
                schedulePolicyType: SimpleSchedulePolicy
                scheduleRunFrequency: Daily
                scheduleRunTimes:
                  - 2023-09-18T06:30:00.000Z
              snapshotBackupAdditionalDetails:
                instantRPDetails: test-rg
                instantRpRetentionRangeInDays: 1
                userAssignedManagedIdentityDetails:
                  identityArmId: /subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourcegroups/test-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/testMsi
                  identityName: testMsi
                  userAssignedIdentityProperties:
                    clientId: c3a877cf-51f8-4031-8f17-ab562d1e7737
                    principalId: 2f5834bd-4b86-4d85-a8df-6dd829a6418c
          workLoadType: SAPHanaDBInstance
        hdbuserstoreKeyName: abcd
        instanceNumber: '00'
        recoveryServicesVault:
          name: test-vault
          resourceGroup: test-rg
          vaultType: New
        sslConfiguration:
          sslCryptoProvider: commoncrypto
          sslHostNameInCertificate: hostname
          sslKeyStore: sapsrv.pse
          sslTrustStore: sapsrv.pse
      backupName: dbBackup
      connectorName: C1
      location: westcentralus
      resourceGroupName: test-rg
      tags: {}

The backupPolicy defines three subProtectionPolicy entries: Full backups run weekly with 104-week retention, Differential backups run daily with 30-day retention, and Log backups run every 120 minutes with 20-day retention. The sslConfiguration block specifies PSE files and crypto provider for secure HANA connectivity. The recoveryServicesVault creates a new vault to store backup data.

Configure SQL Server backup with archive tiering

SQL Server workloads on Azure VMs benefit from tiered storage strategies that move older recovery points to archive storage, reducing backup costs while maintaining compliance requirements.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const acssBackupConnection = new azure_native.workloads.ACSSBackupConnection("acssBackupConnection", {
    backupData: {
        backupPolicy: {
            backupManagementType: "AzureWorkload",
            name: "defaultSqlPolicy",
            protectedItemsCount: 0,
            settings: {
                isCompression: true,
                issqlcompression: true,
                timeZone: "UTC",
            },
            subProtectionPolicy: [
                {
                    policyType: azure_native.workloads.PolicyType.Full,
                    retentionPolicy: {
                        monthlySchedule: {
                            retentionDuration: {
                                count: 60,
                                durationType: azure_native.workloads.RetentionDurationType.Months,
                            },
                            retentionScheduleFormatType: azure_native.workloads.RetentionScheduleFormat.Weekly,
                            retentionScheduleWeekly: {
                                daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                                weeksOfTheMonth: [azure_native.workloads.WeekOfMonth.First],
                            },
                            retentionTimes: ["2022-11-29T19:30:00.000Z"],
                        },
                        retentionPolicyType: "LongTermRetentionPolicy",
                        weeklySchedule: {
                            daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                            retentionDuration: {
                                count: 104,
                                durationType: azure_native.workloads.RetentionDurationType.Weeks,
                            },
                            retentionTimes: ["2022-11-29T19:30:00.000Z"],
                        },
                        yearlySchedule: {
                            monthsOfYear: [azure_native.workloads.MonthOfYear.January],
                            retentionDuration: {
                                count: 10,
                                durationType: azure_native.workloads.RetentionDurationType.Years,
                            },
                            retentionScheduleFormatType: azure_native.workloads.RetentionScheduleFormat.Weekly,
                            retentionScheduleWeekly: {
                                daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                                weeksOfTheMonth: [azure_native.workloads.WeekOfMonth.First],
                            },
                            retentionTimes: ["2022-11-29T19:30:00.000Z"],
                        },
                    },
                    schedulePolicy: {
                        schedulePolicyType: "SimpleSchedulePolicy",
                        scheduleRunDays: [azure_native.workloads.DayOfWeek.Sunday],
                        scheduleRunFrequency: azure_native.workloads.ScheduleRunType.Weekly,
                        scheduleRunTimes: ["2022-11-29T19:30:00.000Z"],
                    },
                    tieringPolicy: {
                        ArchivedRP: {
                            duration: 45,
                            durationType: azure_native.workloads.RetentionDurationType.Days,
                            tieringMode: azure_native.workloads.TieringMode.TierAfter,
                        },
                    },
                },
                {
                    policyType: azure_native.workloads.PolicyType.Differential,
                    retentionPolicy: {
                        retentionDuration: {
                            count: 30,
                            durationType: azure_native.workloads.RetentionDurationType.Days,
                        },
                        retentionPolicyType: "SimpleRetentionPolicy",
                    },
                    schedulePolicy: {
                        schedulePolicyType: "SimpleSchedulePolicy",
                        scheduleRunDays: [azure_native.workloads.DayOfWeek.Monday],
                        scheduleRunFrequency: azure_native.workloads.ScheduleRunType.Weekly,
                        scheduleRunTimes: ["2022-09-29T02:00:00Z"],
                        scheduleWeeklyFrequency: 0,
                    },
                },
                {
                    policyType: azure_native.workloads.PolicyType.Log,
                    retentionPolicy: {
                        retentionDuration: {
                            count: 20,
                            durationType: azure_native.workloads.RetentionDurationType.Days,
                        },
                        retentionPolicyType: "SimpleRetentionPolicy",
                    },
                    schedulePolicy: {
                        scheduleFrequencyInMins: 120,
                        schedulePolicyType: "LogSchedulePolicy",
                    },
                },
            ],
            workLoadType: azure_native.workloads.WorkloadType.SQLDataBase,
        },
        backupType: "SQL",
        recoveryServicesVault: {
            name: "test-vault",
            resourceGroup: "test-rg",
            vaultType: "New",
        },
    },
    backupName: "dbBackup",
    connectorName: "C1",
    location: "westcentralus",
    resourceGroupName: "test-rg",
    tags: {},
});
import pulumi
import pulumi_azure_native as azure_native

acss_backup_connection = azure_native.workloads.ACSSBackupConnection("acssBackupConnection",
    backup_data={
        "backup_policy": {
            "backup_management_type": "AzureWorkload",
            "name": "defaultSqlPolicy",
            "protected_items_count": 0,
            "settings": {
                "is_compression": True,
                "issqlcompression": True,
                "time_zone": "UTC",
            },
            "sub_protection_policy": [
                {
                    "policy_type": azure_native.workloads.PolicyType.FULL,
                    "retention_policy": {
                        "monthly_schedule": {
                            "retention_duration": {
                                "count": 60,
                                "duration_type": azure_native.workloads.RetentionDurationType.MONTHS,
                            },
                            "retention_schedule_format_type": azure_native.workloads.RetentionScheduleFormat.WEEKLY,
                            "retention_schedule_weekly": {
                                "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                                "weeks_of_the_month": [azure_native.workloads.WeekOfMonth.FIRST],
                            },
                            "retention_times": ["2022-11-29T19:30:00.000Z"],
                        },
                        "retention_policy_type": "LongTermRetentionPolicy",
                        "weekly_schedule": {
                            "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                            "retention_duration": {
                                "count": 104,
                                "duration_type": azure_native.workloads.RetentionDurationType.WEEKS,
                            },
                            "retention_times": ["2022-11-29T19:30:00.000Z"],
                        },
                        "yearly_schedule": {
                            "months_of_year": [azure_native.workloads.MonthOfYear.JANUARY],
                            "retention_duration": {
                                "count": 10,
                                "duration_type": azure_native.workloads.RetentionDurationType.YEARS,
                            },
                            "retention_schedule_format_type": azure_native.workloads.RetentionScheduleFormat.WEEKLY,
                            "retention_schedule_weekly": {
                                "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                                "weeks_of_the_month": [azure_native.workloads.WeekOfMonth.FIRST],
                            },
                            "retention_times": ["2022-11-29T19:30:00.000Z"],
                        },
                    },
                    "schedule_policy": {
                        "schedule_policy_type": "SimpleSchedulePolicy",
                        "schedule_run_days": [azure_native.workloads.DayOfWeek.SUNDAY],
                        "schedule_run_frequency": azure_native.workloads.ScheduleRunType.WEEKLY,
                        "schedule_run_times": ["2022-11-29T19:30:00.000Z"],
                    },
                    "tiering_policy": {
                        "ArchivedRP": {
                            "duration": 45,
                            "duration_type": azure_native.workloads.RetentionDurationType.DAYS,
                            "tiering_mode": azure_native.workloads.TieringMode.TIER_AFTER,
                        },
                    },
                },
                {
                    "policy_type": azure_native.workloads.PolicyType.DIFFERENTIAL,
                    "retention_policy": {
                        "retention_duration": {
                            "count": 30,
                            "duration_type": azure_native.workloads.RetentionDurationType.DAYS,
                        },
                        "retention_policy_type": "SimpleRetentionPolicy",
                    },
                    "schedule_policy": {
                        "schedule_policy_type": "SimpleSchedulePolicy",
                        "schedule_run_days": [azure_native.workloads.DayOfWeek.MONDAY],
                        "schedule_run_frequency": azure_native.workloads.ScheduleRunType.WEEKLY,
                        "schedule_run_times": ["2022-09-29T02:00:00Z"],
                        "schedule_weekly_frequency": 0,
                    },
                },
                {
                    "policy_type": azure_native.workloads.PolicyType.LOG,
                    "retention_policy": {
                        "retention_duration": {
                            "count": 20,
                            "duration_type": azure_native.workloads.RetentionDurationType.DAYS,
                        },
                        "retention_policy_type": "SimpleRetentionPolicy",
                    },
                    "schedule_policy": {
                        "schedule_frequency_in_mins": 120,
                        "schedule_policy_type": "LogSchedulePolicy",
                    },
                },
            ],
            "work_load_type": azure_native.workloads.WorkloadType.SQL_DATA_BASE,
        },
        "backup_type": "SQL",
        "recovery_services_vault": {
            "name": "test-vault",
            "resource_group": "test-rg",
            "vault_type": "New",
        },
    },
    backup_name="dbBackup",
    connector_name="C1",
    location="westcentralus",
    resource_group_name="test-rg",
    tags={})
package main

import (
	workloads "github.com/pulumi/pulumi-azure-native-sdk/workloads/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := workloads.NewACSSBackupConnection(ctx, "acssBackupConnection", &workloads.ACSSBackupConnectionArgs{
			BackupData: &workloads.SqlBackupDataArgs{
				BackupPolicy: &workloads.DBBackupPolicyPropertiesArgs{
					BackupManagementType: pulumi.String("AzureWorkload"),
					Name:                 pulumi.String("defaultSqlPolicy"),
					ProtectedItemsCount:  pulumi.Int(0),
					Settings: &workloads.SettingsArgs{
						IsCompression:    pulumi.Bool(true),
						Issqlcompression: pulumi.Bool(true),
						TimeZone:         pulumi.String("UTC"),
					},
					SubProtectionPolicy: workloads.SubProtectionPolicyArray{
						&workloads.SubProtectionPolicyArgs{
							PolicyType: pulumi.String(workloads.PolicyTypeFull),
							RetentionPolicy: workloads.LongTermRetentionPolicy{
								MonthlySchedule: workloads.MonthlyRetentionSchedule{
									RetentionDuration: workloads.RetentionDuration{
										Count:        60,
										DurationType: workloads.RetentionDurationTypeMonths,
									},
									RetentionScheduleFormatType: workloads.RetentionScheduleFormatWeekly,
									RetentionScheduleWeekly: workloads.WeeklyRetentionFormat{
										DaysOfTheWeek: []workloads.DayOfWeek{
											workloads.DayOfWeekSunday,
										},
										WeeksOfTheMonth: []workloads.WeekOfMonth{
											workloads.WeekOfMonthFirst,
										},
									},
									RetentionTimes: []string{
										"2022-11-29T19:30:00.000Z",
									},
								},
								RetentionPolicyType: "LongTermRetentionPolicy",
								WeeklySchedule: workloads.WeeklyRetentionSchedule{
									DaysOfTheWeek: []workloads.DayOfWeek{
										workloads.DayOfWeekSunday,
									},
									RetentionDuration: workloads.RetentionDuration{
										Count:        104,
										DurationType: workloads.RetentionDurationTypeWeeks,
									},
									RetentionTimes: []string{
										"2022-11-29T19:30:00.000Z",
									},
								},
								YearlySchedule: workloads.YearlyRetentionSchedule{
									MonthsOfYear: []workloads.MonthOfYear{
										workloads.MonthOfYearJanuary,
									},
									RetentionDuration: workloads.RetentionDuration{
										Count:        10,
										DurationType: workloads.RetentionDurationTypeYears,
									},
									RetentionScheduleFormatType: workloads.RetentionScheduleFormatWeekly,
									RetentionScheduleWeekly: workloads.WeeklyRetentionFormat{
										DaysOfTheWeek: []workloads.DayOfWeek{
											workloads.DayOfWeekSunday,
										},
										WeeksOfTheMonth: []workloads.WeekOfMonth{
											workloads.WeekOfMonthFirst,
										},
									},
									RetentionTimes: []string{
										"2022-11-29T19:30:00.000Z",
									},
								},
							},
							SchedulePolicy: workloads.SimpleSchedulePolicy{
								SchedulePolicyType: "SimpleSchedulePolicy",
								ScheduleRunDays: []workloads.DayOfWeek{
									workloads.DayOfWeekSunday,
								},
								ScheduleRunFrequency: workloads.ScheduleRunTypeWeekly,
								ScheduleRunTimes: []string{
									"2022-11-29T19:30:00.000Z",
								},
							},
							TieringPolicy: workloads.TieringPolicyMap{
								"ArchivedRP": &workloads.TieringPolicyArgs{
									Duration:     pulumi.Int(45),
									DurationType: pulumi.String(workloads.RetentionDurationTypeDays),
									TieringMode:  pulumi.String(workloads.TieringModeTierAfter),
								},
							},
						},
						&workloads.SubProtectionPolicyArgs{
							PolicyType: pulumi.String(workloads.PolicyTypeDifferential),
							RetentionPolicy: workloads.SimpleRetentionPolicy{
								RetentionDuration: workloads.RetentionDuration{
									Count:        30,
									DurationType: workloads.RetentionDurationTypeDays,
								},
								RetentionPolicyType: "SimpleRetentionPolicy",
							},
							SchedulePolicy: workloads.SimpleSchedulePolicy{
								SchedulePolicyType: "SimpleSchedulePolicy",
								ScheduleRunDays: []workloads.DayOfWeek{
									workloads.DayOfWeekMonday,
								},
								ScheduleRunFrequency: workloads.ScheduleRunTypeWeekly,
								ScheduleRunTimes: []string{
									"2022-09-29T02:00:00Z",
								},
								ScheduleWeeklyFrequency: 0,
							},
						},
						&workloads.SubProtectionPolicyArgs{
							PolicyType: pulumi.String(workloads.PolicyTypeLog),
							RetentionPolicy: workloads.SimpleRetentionPolicy{
								RetentionDuration: workloads.RetentionDuration{
									Count:        20,
									DurationType: workloads.RetentionDurationTypeDays,
								},
								RetentionPolicyType: "SimpleRetentionPolicy",
							},
							SchedulePolicy: workloads.LogSchedulePolicy{
								ScheduleFrequencyInMins: 120,
								SchedulePolicyType:      "LogSchedulePolicy",
							},
						},
					},
					WorkLoadType: pulumi.String(workloads.WorkloadTypeSQLDataBase),
				},
				BackupType: pulumi.String("SQL"),
				RecoveryServicesVault: workloads.NewRecoveryServicesVault{
					Name:          "test-vault",
					ResourceGroup: "test-rg",
					VaultType:     "New",
				},
			},
			BackupName:        pulumi.String("dbBackup"),
			ConnectorName:     pulumi.String("C1"),
			Location:          pulumi.String("westcentralus"),
			ResourceGroupName: pulumi.String("test-rg"),
			Tags:              pulumi.StringMap{},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var acssBackupConnection = new AzureNative.Workloads.ACSSBackupConnection("acssBackupConnection", new()
    {
        BackupData = new AzureNative.Workloads.Inputs.SqlBackupDataArgs
        {
            BackupPolicy = new AzureNative.Workloads.Inputs.DBBackupPolicyPropertiesArgs
            {
                BackupManagementType = "AzureWorkload",
                Name = "defaultSqlPolicy",
                ProtectedItemsCount = 0,
                Settings = new AzureNative.Workloads.Inputs.SettingsArgs
                {
                    IsCompression = true,
                    Issqlcompression = true,
                    TimeZone = "UTC",
                },
                SubProtectionPolicy = new[]
                {
                    new AzureNative.Workloads.Inputs.SubProtectionPolicyArgs
                    {
                        PolicyType = AzureNative.Workloads.PolicyType.Full,
                        RetentionPolicy = new AzureNative.Workloads.Inputs.LongTermRetentionPolicyArgs
                        {
                            MonthlySchedule = new AzureNative.Workloads.Inputs.MonthlyRetentionScheduleArgs
                            {
                                RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                                {
                                    Count = 60,
                                    DurationType = AzureNative.Workloads.RetentionDurationType.Months,
                                },
                                RetentionScheduleFormatType = AzureNative.Workloads.RetentionScheduleFormat.Weekly,
                                RetentionScheduleWeekly = new AzureNative.Workloads.Inputs.WeeklyRetentionFormatArgs
                                {
                                    DaysOfTheWeek = new[]
                                    {
                                        AzureNative.Workloads.DayOfWeek.Sunday,
                                    },
                                    WeeksOfTheMonth = new[]
                                    {
                                        AzureNative.Workloads.WeekOfMonth.First,
                                    },
                                },
                                RetentionTimes = new[]
                                {
                                    "2022-11-29T19:30:00.000Z",
                                },
                            },
                            RetentionPolicyType = "LongTermRetentionPolicy",
                            WeeklySchedule = new AzureNative.Workloads.Inputs.WeeklyRetentionScheduleArgs
                            {
                                DaysOfTheWeek = new[]
                                {
                                    AzureNative.Workloads.DayOfWeek.Sunday,
                                },
                                RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                                {
                                    Count = 104,
                                    DurationType = AzureNative.Workloads.RetentionDurationType.Weeks,
                                },
                                RetentionTimes = new[]
                                {
                                    "2022-11-29T19:30:00.000Z",
                                },
                            },
                            YearlySchedule = new AzureNative.Workloads.Inputs.YearlyRetentionScheduleArgs
                            {
                                MonthsOfYear = new[]
                                {
                                    AzureNative.Workloads.MonthOfYear.January,
                                },
                                RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                                {
                                    Count = 10,
                                    DurationType = AzureNative.Workloads.RetentionDurationType.Years,
                                },
                                RetentionScheduleFormatType = AzureNative.Workloads.RetentionScheduleFormat.Weekly,
                                RetentionScheduleWeekly = new AzureNative.Workloads.Inputs.WeeklyRetentionFormatArgs
                                {
                                    DaysOfTheWeek = new[]
                                    {
                                        AzureNative.Workloads.DayOfWeek.Sunday,
                                    },
                                    WeeksOfTheMonth = new[]
                                    {
                                        AzureNative.Workloads.WeekOfMonth.First,
                                    },
                                },
                                RetentionTimes = new[]
                                {
                                    "2022-11-29T19:30:00.000Z",
                                },
                            },
                        },
                        SchedulePolicy = new AzureNative.Workloads.Inputs.SimpleSchedulePolicyArgs
                        {
                            SchedulePolicyType = "SimpleSchedulePolicy",
                            ScheduleRunDays = new[]
                            {
                                AzureNative.Workloads.DayOfWeek.Sunday,
                            },
                            ScheduleRunFrequency = AzureNative.Workloads.ScheduleRunType.Weekly,
                            ScheduleRunTimes = new[]
                            {
                                "2022-11-29T19:30:00.000Z",
                            },
                        },
                        TieringPolicy = 
                        {
                            { "ArchivedRP", new AzureNative.Workloads.Inputs.TieringPolicyArgs
                            {
                                Duration = 45,
                                DurationType = AzureNative.Workloads.RetentionDurationType.Days,
                                TieringMode = AzureNative.Workloads.TieringMode.TierAfter,
                            } },
                        },
                    },
                    new AzureNative.Workloads.Inputs.SubProtectionPolicyArgs
                    {
                        PolicyType = AzureNative.Workloads.PolicyType.Differential,
                        RetentionPolicy = new AzureNative.Workloads.Inputs.SimpleRetentionPolicyArgs
                        {
                            RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                            {
                                Count = 30,
                                DurationType = AzureNative.Workloads.RetentionDurationType.Days,
                            },
                            RetentionPolicyType = "SimpleRetentionPolicy",
                        },
                        SchedulePolicy = new AzureNative.Workloads.Inputs.SimpleSchedulePolicyArgs
                        {
                            SchedulePolicyType = "SimpleSchedulePolicy",
                            ScheduleRunDays = new[]
                            {
                                AzureNative.Workloads.DayOfWeek.Monday,
                            },
                            ScheduleRunFrequency = AzureNative.Workloads.ScheduleRunType.Weekly,
                            ScheduleRunTimes = new[]
                            {
                                "2022-09-29T02:00:00Z",
                            },
                            ScheduleWeeklyFrequency = 0,
                        },
                    },
                    new AzureNative.Workloads.Inputs.SubProtectionPolicyArgs
                    {
                        PolicyType = AzureNative.Workloads.PolicyType.Log,
                        RetentionPolicy = new AzureNative.Workloads.Inputs.SimpleRetentionPolicyArgs
                        {
                            RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                            {
                                Count = 20,
                                DurationType = AzureNative.Workloads.RetentionDurationType.Days,
                            },
                            RetentionPolicyType = "SimpleRetentionPolicy",
                        },
                        SchedulePolicy = new AzureNative.Workloads.Inputs.LogSchedulePolicyArgs
                        {
                            ScheduleFrequencyInMins = 120,
                            SchedulePolicyType = "LogSchedulePolicy",
                        },
                    },
                },
                WorkLoadType = AzureNative.Workloads.WorkloadType.SQLDataBase,
            },
            BackupType = "SQL",
            RecoveryServicesVault = new AzureNative.Workloads.Inputs.NewRecoveryServicesVaultArgs
            {
                Name = "test-vault",
                ResourceGroup = "test-rg",
                VaultType = "New",
            },
        },
        BackupName = "dbBackup",
        ConnectorName = "C1",
        Location = "westcentralus",
        ResourceGroupName = "test-rg",
        Tags = null,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.workloads.ACSSBackupConnection;
import com.pulumi.azurenative.workloads.ACSSBackupConnectionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var acssBackupConnection = new ACSSBackupConnection("acssBackupConnection", ACSSBackupConnectionArgs.builder()
            .backupData(SqlBackupDataArgs.builder()
                .backupPolicy(Map.ofEntries(
                    Map.entry("backupManagementType", "AzureWorkload"),
                    Map.entry("name", "defaultSqlPolicy"),
                    Map.entry("protectedItemsCount", 0),
                    Map.entry("settings", SettingsArgs.builder()
                        .isCompression(true)
                        .issqlcompression(true)
                        .timeZone("UTC")
                        .build()),
                    Map.entry("subProtectionPolicy",                     
                        SubProtectionPolicyArgs.builder()
                            .policyType("Full")
                            .retentionPolicy(LongTermRetentionPolicyArgs.builder()
                                .monthlySchedule(MonthlyRetentionScheduleArgs.builder()
                                    .retentionDuration(RetentionDurationArgs.builder()
                                        .count(60)
                                        .durationType("Months")
                                        .build())
                                    .retentionScheduleFormatType("Weekly")
                                    .retentionScheduleWeekly(WeeklyRetentionFormatArgs.builder()
                                        .daysOfTheWeek("Sunday")
                                        .weeksOfTheMonth("First")
                                        .build())
                                    .retentionTimes("2022-11-29T19:30:00.000Z")
                                    .build())
                                .retentionPolicyType("LongTermRetentionPolicy")
                                .weeklySchedule(WeeklyRetentionScheduleArgs.builder()
                                    .daysOfTheWeek("Sunday")
                                    .retentionDuration(RetentionDurationArgs.builder()
                                        .count(104)
                                        .durationType("Weeks")
                                        .build())
                                    .retentionTimes("2022-11-29T19:30:00.000Z")
                                    .build())
                                .yearlySchedule(YearlyRetentionScheduleArgs.builder()
                                    .monthsOfYear("January")
                                    .retentionDuration(RetentionDurationArgs.builder()
                                        .count(10)
                                        .durationType("Years")
                                        .build())
                                    .retentionScheduleFormatType("Weekly")
                                    .retentionScheduleWeekly(WeeklyRetentionFormatArgs.builder()
                                        .daysOfTheWeek("Sunday")
                                        .weeksOfTheMonth("First")
                                        .build())
                                    .retentionTimes("2022-11-29T19:30:00.000Z")
                                    .build())
                                .build())
                            .schedulePolicy(SimpleSchedulePolicyArgs.builder()
                                .schedulePolicyType("SimpleSchedulePolicy")
                                .scheduleRunDays("Sunday")
                                .scheduleRunFrequency("Weekly")
                                .scheduleRunTimes("2022-11-29T19:30:00.000Z")
                                .build())
                            .tieringPolicy(Map.of("ArchivedRP", TieringPolicyArgs.builder()
                                .duration(45)
                                .durationType("Days")
                                .tieringMode("TierAfter")
                                .build()))
                            .build(),
                        SubProtectionPolicyArgs.builder()
                            .policyType("Differential")
                            .retentionPolicy(SimpleRetentionPolicyArgs.builder()
                                .retentionDuration(RetentionDurationArgs.builder()
                                    .count(30)
                                    .durationType("Days")
                                    .build())
                                .retentionPolicyType("SimpleRetentionPolicy")
                                .build())
                            .schedulePolicy(SimpleSchedulePolicyArgs.builder()
                                .schedulePolicyType("SimpleSchedulePolicy")
                                .scheduleRunDays("Monday")
                                .scheduleRunFrequency("Weekly")
                                .scheduleRunTimes("2022-09-29T02:00:00Z")
                                .scheduleWeeklyFrequency(0)
                                .build())
                            .build(),
                        SubProtectionPolicyArgs.builder()
                            .policyType("Log")
                            .retentionPolicy(SimpleRetentionPolicyArgs.builder()
                                .retentionDuration(RetentionDurationArgs.builder()
                                    .count(20)
                                    .durationType("Days")
                                    .build())
                                .retentionPolicyType("SimpleRetentionPolicy")
                                .build())
                            .schedulePolicy(LogSchedulePolicyArgs.builder()
                                .scheduleFrequencyInMins(120)
                                .schedulePolicyType("LogSchedulePolicy")
                                .build())
                            .build()),
                    Map.entry("workLoadType", "SQLDataBase")
                ))
                .backupType("SQL")
                .recoveryServicesVault(NewRecoveryServicesVaultArgs.builder()
                    .name("test-vault")
                    .resourceGroup("test-rg")
                    .vaultType("New")
                    .build())
                .build())
            .backupName("dbBackup")
            .connectorName("C1")
            .location("westcentralus")
            .resourceGroupName("test-rg")
            .tags(Map.ofEntries(
            ))
            .build());

    }
}
resources:
  acssBackupConnection:
    type: azure-native:workloads:ACSSBackupConnection
    properties:
      backupData:
        backupPolicy:
          backupManagementType: AzureWorkload
          name: defaultSqlPolicy
          protectedItemsCount: 0
          settings:
            isCompression: true
            issqlcompression: true
            timeZone: UTC
          subProtectionPolicy:
            - policyType: Full
              retentionPolicy:
                monthlySchedule:
                  retentionDuration:
                    count: 60
                    durationType: Months
                  retentionScheduleFormatType: Weekly
                  retentionScheduleWeekly:
                    daysOfTheWeek:
                      - Sunday
                    weeksOfTheMonth:
                      - First
                  retentionTimes:
                    - 2022-11-29T19:30:00.000Z
                retentionPolicyType: LongTermRetentionPolicy
                weeklySchedule:
                  daysOfTheWeek:
                    - Sunday
                  retentionDuration:
                    count: 104
                    durationType: Weeks
                  retentionTimes:
                    - 2022-11-29T19:30:00.000Z
                yearlySchedule:
                  monthsOfYear:
                    - January
                  retentionDuration:
                    count: 10
                    durationType: Years
                  retentionScheduleFormatType: Weekly
                  retentionScheduleWeekly:
                    daysOfTheWeek:
                      - Sunday
                    weeksOfTheMonth:
                      - First
                  retentionTimes:
                    - 2022-11-29T19:30:00.000Z
              schedulePolicy:
                schedulePolicyType: SimpleSchedulePolicy
                scheduleRunDays:
                  - Sunday
                scheduleRunFrequency: Weekly
                scheduleRunTimes:
                  - 2022-11-29T19:30:00.000Z
              tieringPolicy:
                ArchivedRP:
                  duration: 45
                  durationType: Days
                  tieringMode: TierAfter
            - policyType: Differential
              retentionPolicy:
                retentionDuration:
                  count: 30
                  durationType: Days
                retentionPolicyType: SimpleRetentionPolicy
              schedulePolicy:
                schedulePolicyType: SimpleSchedulePolicy
                scheduleRunDays:
                  - Monday
                scheduleRunFrequency: Weekly
                scheduleRunTimes:
                  - 2022-09-29T02:00:00Z
                scheduleWeeklyFrequency: 0
            - policyType: Log
              retentionPolicy:
                retentionDuration:
                  count: 20
                  durationType: Days
                retentionPolicyType: SimpleRetentionPolicy
              schedulePolicy:
                scheduleFrequencyInMins: 120
                schedulePolicyType: LogSchedulePolicy
          workLoadType: SQLDataBase
        backupType: SQL
        recoveryServicesVault:
          name: test-vault
          resourceGroup: test-rg
          vaultType: New
      backupName: dbBackup
      connectorName: C1
      location: westcentralus
      resourceGroupName: test-rg
      tags: {}

The tieringPolicy moves recovery points to archive storage 45 days after creation using TierAfter mode. The subProtectionPolicy array defines Full, Differential, and Log backup schedules with their own retention rules. Compression is enabled through the settings block to reduce storage consumption.

Configure VM backup with instant restore and archive tiering

Azure VM backups can retain instant recovery snapshots for fast restores while automatically moving older backups to archive storage for cost optimization.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const acssBackupConnection = new azure_native.workloads.ACSSBackupConnection("acssBackupConnection", {
    backupData: {
        backupPolicy: {
            backupManagementType: "AzureIaasVM",
            instantRPDetails: {
                azureBackupRGNamePrefix: "dasas",
                azureBackupRGNameSuffix: "a",
            },
            instantRpRetentionRangeInDays: 2,
            name: "defaultVmPolicy",
            policyType: azure_native.workloads.IAASVMPolicyType.V1,
            protectedItemsCount: 0,
            retentionPolicy: {
                dailySchedule: {
                    retentionDuration: {
                        count: 30,
                        durationType: azure_native.workloads.RetentionDurationType.Days,
                    },
                    retentionTimes: ["2022-11-29T19:30:00.000Z"],
                },
                monthlySchedule: {
                    retentionDuration: {
                        count: 60,
                        durationType: azure_native.workloads.RetentionDurationType.Months,
                    },
                    retentionScheduleFormatType: azure_native.workloads.RetentionScheduleFormat.Weekly,
                    retentionScheduleWeekly: {
                        daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                        weeksOfTheMonth: [azure_native.workloads.WeekOfMonth.First],
                    },
                    retentionTimes: ["2022-11-29T19:30:00.000Z"],
                },
                retentionPolicyType: "LongTermRetentionPolicy",
                weeklySchedule: {
                    daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                    retentionDuration: {
                        count: 12,
                        durationType: azure_native.workloads.RetentionDurationType.Weeks,
                    },
                    retentionTimes: ["2022-11-29T19:30:00.000Z"],
                },
                yearlySchedule: {
                    monthsOfYear: [azure_native.workloads.MonthOfYear.January],
                    retentionDuration: {
                        count: 10,
                        durationType: azure_native.workloads.RetentionDurationType.Years,
                    },
                    retentionScheduleFormatType: azure_native.workloads.RetentionScheduleFormat.Weekly,
                    retentionScheduleWeekly: {
                        daysOfTheWeek: [azure_native.workloads.DayOfWeek.Sunday],
                        weeksOfTheMonth: [azure_native.workloads.WeekOfMonth.First],
                    },
                    retentionTimes: ["2022-11-29T19:30:00.000Z"],
                },
            },
            schedulePolicy: {
                schedulePolicyType: "SimpleSchedulePolicy",
                scheduleRunFrequency: azure_native.workloads.ScheduleRunType.Daily,
                scheduleRunTimes: ["2022-11-29T19:30:00.000Z"],
            },
            tieringPolicy: {
                ArchivedRP: {
                    duration: 3,
                    durationType: azure_native.workloads.RetentionDurationType.Months,
                    tieringMode: azure_native.workloads.TieringMode.TierAfter,
                },
            },
            timeZone: "UTC",
        },
        backupType: "VM",
        diskExclusionProperties: {
            diskLunList: [],
            isInclusionList: true,
        },
        recoveryServicesVault: {
            name: "test-vault",
            resourceGroup: "test-rg",
            vaultType: "New",
        },
    },
    backupName: "vmBackup",
    connectorName: "C1",
    location: "westcentralus",
    resourceGroupName: "test-rg",
    tags: {},
});
import pulumi
import pulumi_azure_native as azure_native

acss_backup_connection = azure_native.workloads.ACSSBackupConnection("acssBackupConnection",
    backup_data={
        "backup_policy": {
            "backup_management_type": "AzureIaasVM",
            "instant_rp_details": {
                "azure_backup_rg_name_prefix": "dasas",
                "azure_backup_rg_name_suffix": "a",
            },
            "instant_rp_retention_range_in_days": 2,
            "name": "defaultVmPolicy",
            "policy_type": azure_native.workloads.IAASVMPolicyType.V1,
            "protected_items_count": 0,
            "retention_policy": {
                "daily_schedule": {
                    "retention_duration": {
                        "count": 30,
                        "duration_type": azure_native.workloads.RetentionDurationType.DAYS,
                    },
                    "retention_times": ["2022-11-29T19:30:00.000Z"],
                },
                "monthly_schedule": {
                    "retention_duration": {
                        "count": 60,
                        "duration_type": azure_native.workloads.RetentionDurationType.MONTHS,
                    },
                    "retention_schedule_format_type": azure_native.workloads.RetentionScheduleFormat.WEEKLY,
                    "retention_schedule_weekly": {
                        "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                        "weeks_of_the_month": [azure_native.workloads.WeekOfMonth.FIRST],
                    },
                    "retention_times": ["2022-11-29T19:30:00.000Z"],
                },
                "retention_policy_type": "LongTermRetentionPolicy",
                "weekly_schedule": {
                    "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                    "retention_duration": {
                        "count": 12,
                        "duration_type": azure_native.workloads.RetentionDurationType.WEEKS,
                    },
                    "retention_times": ["2022-11-29T19:30:00.000Z"],
                },
                "yearly_schedule": {
                    "months_of_year": [azure_native.workloads.MonthOfYear.JANUARY],
                    "retention_duration": {
                        "count": 10,
                        "duration_type": azure_native.workloads.RetentionDurationType.YEARS,
                    },
                    "retention_schedule_format_type": azure_native.workloads.RetentionScheduleFormat.WEEKLY,
                    "retention_schedule_weekly": {
                        "days_of_the_week": [azure_native.workloads.DayOfWeek.SUNDAY],
                        "weeks_of_the_month": [azure_native.workloads.WeekOfMonth.FIRST],
                    },
                    "retention_times": ["2022-11-29T19:30:00.000Z"],
                },
            },
            "schedule_policy": {
                "schedule_policy_type": "SimpleSchedulePolicy",
                "schedule_run_frequency": azure_native.workloads.ScheduleRunType.DAILY,
                "schedule_run_times": ["2022-11-29T19:30:00.000Z"],
            },
            "tiering_policy": {
                "ArchivedRP": {
                    "duration": 3,
                    "duration_type": azure_native.workloads.RetentionDurationType.MONTHS,
                    "tiering_mode": azure_native.workloads.TieringMode.TIER_AFTER,
                },
            },
            "time_zone": "UTC",
        },
        "backup_type": "VM",
        "disk_exclusion_properties": {
            "disk_lun_list": [],
            "is_inclusion_list": True,
        },
        "recovery_services_vault": {
            "name": "test-vault",
            "resource_group": "test-rg",
            "vault_type": "New",
        },
    },
    backup_name="vmBackup",
    connector_name="C1",
    location="westcentralus",
    resource_group_name="test-rg",
    tags={})
package main

import (
	workloads "github.com/pulumi/pulumi-azure-native-sdk/workloads/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := workloads.NewACSSBackupConnection(ctx, "acssBackupConnection", &workloads.ACSSBackupConnectionArgs{
			BackupData: &workloads.VMBackupDataArgs{
				BackupPolicy: &workloads.VMBackupPolicyPropertiesArgs{
					BackupManagementType: pulumi.String("AzureIaasVM"),
					InstantRPDetails: &workloads.InstantRPAdditionalDetailsArgs{
						AzureBackupRGNamePrefix: pulumi.String("dasas"),
						AzureBackupRGNameSuffix: pulumi.String("a"),
					},
					InstantRpRetentionRangeInDays: pulumi.Int(2),
					Name:                          pulumi.String("defaultVmPolicy"),
					PolicyType:                    pulumi.String(workloads.IAASVMPolicyTypeV1),
					ProtectedItemsCount:           pulumi.Int(0),
					RetentionPolicy: workloads.LongTermRetentionPolicy{
						DailySchedule: workloads.DailyRetentionSchedule{
							RetentionDuration: workloads.RetentionDuration{
								Count:        30,
								DurationType: workloads.RetentionDurationTypeDays,
							},
							RetentionTimes: []string{
								"2022-11-29T19:30:00.000Z",
							},
						},
						MonthlySchedule: workloads.MonthlyRetentionSchedule{
							RetentionDuration: workloads.RetentionDuration{
								Count:        60,
								DurationType: workloads.RetentionDurationTypeMonths,
							},
							RetentionScheduleFormatType: workloads.RetentionScheduleFormatWeekly,
							RetentionScheduleWeekly: workloads.WeeklyRetentionFormat{
								DaysOfTheWeek: []workloads.DayOfWeek{
									workloads.DayOfWeekSunday,
								},
								WeeksOfTheMonth: []workloads.WeekOfMonth{
									workloads.WeekOfMonthFirst,
								},
							},
							RetentionTimes: []string{
								"2022-11-29T19:30:00.000Z",
							},
						},
						RetentionPolicyType: "LongTermRetentionPolicy",
						WeeklySchedule: workloads.WeeklyRetentionSchedule{
							DaysOfTheWeek: []workloads.DayOfWeek{
								workloads.DayOfWeekSunday,
							},
							RetentionDuration: workloads.RetentionDuration{
								Count:        12,
								DurationType: workloads.RetentionDurationTypeWeeks,
							},
							RetentionTimes: []string{
								"2022-11-29T19:30:00.000Z",
							},
						},
						YearlySchedule: workloads.YearlyRetentionSchedule{
							MonthsOfYear: []workloads.MonthOfYear{
								workloads.MonthOfYearJanuary,
							},
							RetentionDuration: workloads.RetentionDuration{
								Count:        10,
								DurationType: workloads.RetentionDurationTypeYears,
							},
							RetentionScheduleFormatType: workloads.RetentionScheduleFormatWeekly,
							RetentionScheduleWeekly: workloads.WeeklyRetentionFormat{
								DaysOfTheWeek: []workloads.DayOfWeek{
									workloads.DayOfWeekSunday,
								},
								WeeksOfTheMonth: []workloads.WeekOfMonth{
									workloads.WeekOfMonthFirst,
								},
							},
							RetentionTimes: []string{
								"2022-11-29T19:30:00.000Z",
							},
						},
					},
					SchedulePolicy: workloads.SimpleSchedulePolicy{
						SchedulePolicyType:   "SimpleSchedulePolicy",
						ScheduleRunFrequency: workloads.ScheduleRunTypeDaily,
						ScheduleRunTimes: []string{
							"2022-11-29T19:30:00.000Z",
						},
					},
					TieringPolicy: workloads.TieringPolicyMap{
						"ArchivedRP": &workloads.TieringPolicyArgs{
							Duration:     pulumi.Int(3),
							DurationType: pulumi.String(workloads.RetentionDurationTypeMonths),
							TieringMode:  pulumi.String(workloads.TieringModeTierAfter),
						},
					},
					TimeZone: pulumi.String("UTC"),
				},
				BackupType: pulumi.String("VM"),
				DiskExclusionProperties: &workloads.DiskExclusionPropertiesArgs{
					DiskLunList:     pulumi.IntArray{},
					IsInclusionList: pulumi.Bool(true),
				},
				RecoveryServicesVault: workloads.NewRecoveryServicesVault{
					Name:          "test-vault",
					ResourceGroup: "test-rg",
					VaultType:     "New",
				},
			},
			BackupName:        pulumi.String("vmBackup"),
			ConnectorName:     pulumi.String("C1"),
			Location:          pulumi.String("westcentralus"),
			ResourceGroupName: pulumi.String("test-rg"),
			Tags:              pulumi.StringMap{},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var acssBackupConnection = new AzureNative.Workloads.ACSSBackupConnection("acssBackupConnection", new()
    {
        BackupData = new AzureNative.Workloads.Inputs.VMBackupDataArgs
        {
            BackupPolicy = new AzureNative.Workloads.Inputs.VMBackupPolicyPropertiesArgs
            {
                BackupManagementType = "AzureIaasVM",
                InstantRPDetails = new AzureNative.Workloads.Inputs.InstantRPAdditionalDetailsArgs
                {
                    AzureBackupRGNamePrefix = "dasas",
                    AzureBackupRGNameSuffix = "a",
                },
                InstantRpRetentionRangeInDays = 2,
                Name = "defaultVmPolicy",
                PolicyType = AzureNative.Workloads.IAASVMPolicyType.V1,
                ProtectedItemsCount = 0,
                RetentionPolicy = new AzureNative.Workloads.Inputs.LongTermRetentionPolicyArgs
                {
                    DailySchedule = new AzureNative.Workloads.Inputs.DailyRetentionScheduleArgs
                    {
                        RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                        {
                            Count = 30,
                            DurationType = AzureNative.Workloads.RetentionDurationType.Days,
                        },
                        RetentionTimes = new[]
                        {
                            "2022-11-29T19:30:00.000Z",
                        },
                    },
                    MonthlySchedule = new AzureNative.Workloads.Inputs.MonthlyRetentionScheduleArgs
                    {
                        RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                        {
                            Count = 60,
                            DurationType = AzureNative.Workloads.RetentionDurationType.Months,
                        },
                        RetentionScheduleFormatType = AzureNative.Workloads.RetentionScheduleFormat.Weekly,
                        RetentionScheduleWeekly = new AzureNative.Workloads.Inputs.WeeklyRetentionFormatArgs
                        {
                            DaysOfTheWeek = new[]
                            {
                                AzureNative.Workloads.DayOfWeek.Sunday,
                            },
                            WeeksOfTheMonth = new[]
                            {
                                AzureNative.Workloads.WeekOfMonth.First,
                            },
                        },
                        RetentionTimes = new[]
                        {
                            "2022-11-29T19:30:00.000Z",
                        },
                    },
                    RetentionPolicyType = "LongTermRetentionPolicy",
                    WeeklySchedule = new AzureNative.Workloads.Inputs.WeeklyRetentionScheduleArgs
                    {
                        DaysOfTheWeek = new[]
                        {
                            AzureNative.Workloads.DayOfWeek.Sunday,
                        },
                        RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                        {
                            Count = 12,
                            DurationType = AzureNative.Workloads.RetentionDurationType.Weeks,
                        },
                        RetentionTimes = new[]
                        {
                            "2022-11-29T19:30:00.000Z",
                        },
                    },
                    YearlySchedule = new AzureNative.Workloads.Inputs.YearlyRetentionScheduleArgs
                    {
                        MonthsOfYear = new[]
                        {
                            AzureNative.Workloads.MonthOfYear.January,
                        },
                        RetentionDuration = new AzureNative.Workloads.Inputs.RetentionDurationArgs
                        {
                            Count = 10,
                            DurationType = AzureNative.Workloads.RetentionDurationType.Years,
                        },
                        RetentionScheduleFormatType = AzureNative.Workloads.RetentionScheduleFormat.Weekly,
                        RetentionScheduleWeekly = new AzureNative.Workloads.Inputs.WeeklyRetentionFormatArgs
                        {
                            DaysOfTheWeek = new[]
                            {
                                AzureNative.Workloads.DayOfWeek.Sunday,
                            },
                            WeeksOfTheMonth = new[]
                            {
                                AzureNative.Workloads.WeekOfMonth.First,
                            },
                        },
                        RetentionTimes = new[]
                        {
                            "2022-11-29T19:30:00.000Z",
                        },
                    },
                },
                SchedulePolicy = new AzureNative.Workloads.Inputs.SimpleSchedulePolicyArgs
                {
                    SchedulePolicyType = "SimpleSchedulePolicy",
                    ScheduleRunFrequency = AzureNative.Workloads.ScheduleRunType.Daily,
                    ScheduleRunTimes = new[]
                    {
                        "2022-11-29T19:30:00.000Z",
                    },
                },
                TieringPolicy = 
                {
                    { "ArchivedRP", new AzureNative.Workloads.Inputs.TieringPolicyArgs
                    {
                        Duration = 3,
                        DurationType = AzureNative.Workloads.RetentionDurationType.Months,
                        TieringMode = AzureNative.Workloads.TieringMode.TierAfter,
                    } },
                },
                TimeZone = "UTC",
            },
            BackupType = "VM",
            DiskExclusionProperties = new AzureNative.Workloads.Inputs.DiskExclusionPropertiesArgs
            {
                DiskLunList = new() { },
                IsInclusionList = true,
            },
            RecoveryServicesVault = new AzureNative.Workloads.Inputs.NewRecoveryServicesVaultArgs
            {
                Name = "test-vault",
                ResourceGroup = "test-rg",
                VaultType = "New",
            },
        },
        BackupName = "vmBackup",
        ConnectorName = "C1",
        Location = "westcentralus",
        ResourceGroupName = "test-rg",
        Tags = null,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.workloads.ACSSBackupConnection;
import com.pulumi.azurenative.workloads.ACSSBackupConnectionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var acssBackupConnection = new ACSSBackupConnection("acssBackupConnection", ACSSBackupConnectionArgs.builder()
            .backupData(VMBackupDataArgs.builder()
                .backupPolicy(Map.ofEntries(
                    Map.entry("backupManagementType", "AzureIaasVM"),
                    Map.entry("instantRPDetails", InstantRPAdditionalDetailsArgs.builder()
                        .azureBackupRGNamePrefix("dasas")
                        .azureBackupRGNameSuffix("a")
                        .build()),
                    Map.entry("instantRpRetentionRangeInDays", 2),
                    Map.entry("name", "defaultVmPolicy"),
                    Map.entry("policyType", "V1"),
                    Map.entry("protectedItemsCount", 0),
                    Map.entry("retentionPolicy", LongTermRetentionPolicyArgs.builder()
                        .dailySchedule(DailyRetentionScheduleArgs.builder()
                            .retentionDuration(RetentionDurationArgs.builder()
                                .count(30)
                                .durationType("Days")
                                .build())
                            .retentionTimes("2022-11-29T19:30:00.000Z")
                            .build())
                        .monthlySchedule(MonthlyRetentionScheduleArgs.builder()
                            .retentionDuration(RetentionDurationArgs.builder()
                                .count(60)
                                .durationType("Months")
                                .build())
                            .retentionScheduleFormatType("Weekly")
                            .retentionScheduleWeekly(WeeklyRetentionFormatArgs.builder()
                                .daysOfTheWeek("Sunday")
                                .weeksOfTheMonth("First")
                                .build())
                            .retentionTimes("2022-11-29T19:30:00.000Z")
                            .build())
                        .retentionPolicyType("LongTermRetentionPolicy")
                        .weeklySchedule(WeeklyRetentionScheduleArgs.builder()
                            .daysOfTheWeek("Sunday")
                            .retentionDuration(RetentionDurationArgs.builder()
                                .count(12)
                                .durationType("Weeks")
                                .build())
                            .retentionTimes("2022-11-29T19:30:00.000Z")
                            .build())
                        .yearlySchedule(YearlyRetentionScheduleArgs.builder()
                            .monthsOfYear("January")
                            .retentionDuration(RetentionDurationArgs.builder()
                                .count(10)
                                .durationType("Years")
                                .build())
                            .retentionScheduleFormatType("Weekly")
                            .retentionScheduleWeekly(WeeklyRetentionFormatArgs.builder()
                                .daysOfTheWeek("Sunday")
                                .weeksOfTheMonth("First")
                                .build())
                            .retentionTimes("2022-11-29T19:30:00.000Z")
                            .build())
                        .build()),
                    Map.entry("schedulePolicy", SimpleSchedulePolicyArgs.builder()
                        .schedulePolicyType("SimpleSchedulePolicy")
                        .scheduleRunFrequency("Daily")
                        .scheduleRunTimes("2022-11-29T19:30:00.000Z")
                        .build()),
                    Map.entry("tieringPolicy", Map.of("ArchivedRP", TieringPolicyArgs.builder()
                        .duration(3)
                        .durationType("Months")
                        .tieringMode("TierAfter")
                        .build())),
                    Map.entry("timeZone", "UTC")
                ))
                .backupType("VM")
                .diskExclusionProperties(DiskExclusionPropertiesArgs.builder()
                    .diskLunList()
                    .isInclusionList(true)
                    .build())
                .recoveryServicesVault(NewRecoveryServicesVaultArgs.builder()
                    .name("test-vault")
                    .resourceGroup("test-rg")
                    .vaultType("New")
                    .build())
                .build())
            .backupName("vmBackup")
            .connectorName("C1")
            .location("westcentralus")
            .resourceGroupName("test-rg")
            .tags(Map.ofEntries(
            ))
            .build());

    }
}
resources:
  acssBackupConnection:
    type: azure-native:workloads:ACSSBackupConnection
    properties:
      backupData:
        backupPolicy:
          backupManagementType: AzureIaasVM
          instantRPDetails:
            azureBackupRGNamePrefix: dasas
            azureBackupRGNameSuffix: a
          instantRpRetentionRangeInDays: 2
          name: defaultVmPolicy
          policyType: V1
          protectedItemsCount: 0
          retentionPolicy:
            dailySchedule:
              retentionDuration:
                count: 30
                durationType: Days
              retentionTimes:
                - 2022-11-29T19:30:00.000Z
            monthlySchedule:
              retentionDuration:
                count: 60
                durationType: Months
              retentionScheduleFormatType: Weekly
              retentionScheduleWeekly:
                daysOfTheWeek:
                  - Sunday
                weeksOfTheMonth:
                  - First
              retentionTimes:
                - 2022-11-29T19:30:00.000Z
            retentionPolicyType: LongTermRetentionPolicy
            weeklySchedule:
              daysOfTheWeek:
                - Sunday
              retentionDuration:
                count: 12
                durationType: Weeks
              retentionTimes:
                - 2022-11-29T19:30:00.000Z
            yearlySchedule:
              monthsOfYear:
                - January
              retentionDuration:
                count: 10
                durationType: Years
              retentionScheduleFormatType: Weekly
              retentionScheduleWeekly:
                daysOfTheWeek:
                  - Sunday
                weeksOfTheMonth:
                  - First
              retentionTimes:
                - 2022-11-29T19:30:00.000Z
          schedulePolicy:
            schedulePolicyType: SimpleSchedulePolicy
            scheduleRunFrequency: Daily
            scheduleRunTimes:
              - 2022-11-29T19:30:00.000Z
          tieringPolicy:
            ArchivedRP:
              duration: 3
              durationType: Months
              tieringMode: TierAfter
          timeZone: UTC
        backupType: VM
        diskExclusionProperties:
          diskLunList: []
          isInclusionList: true
        recoveryServicesVault:
          name: test-vault
          resourceGroup: test-rg
          vaultType: New
      backupName: vmBackup
      connectorName: C1
      location: westcentralus
      resourceGroupName: test-rg
      tags: {}

The instantRpRetentionRangeInDays property keeps snapshots for 2 days, enabling fast VM recovery without restoring from vault storage. The tieringPolicy moves backups to archive after 3 months. The diskExclusionProperties block controls which disks are backed up; an empty diskLunList with isInclusionList true means all disks are included.

Connect database backup to existing policy and vault

When standardizing backup configurations across multiple databases, teams reference existing backup policies rather than defining new ones for each connection.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const acssBackupConnection = new azure_native.workloads.ACSSBackupConnection("acssBackupConnection", {
    backupData: {
        backupPolicy: {
            name: "defaultDbPolicy",
        },
        backupType: "SQL",
        recoveryServicesVault: {
            id: "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
            vaultType: "Existing",
        },
    },
    backupName: "dbBackup",
    connectorName: "C1",
    location: "westcentralus",
    resourceGroupName: "test-rg",
    tags: {},
});
import pulumi
import pulumi_azure_native as azure_native

acss_backup_connection = azure_native.workloads.ACSSBackupConnection("acssBackupConnection",
    backup_data={
        "backup_policy": {
            "name": "defaultDbPolicy",
        },
        "backup_type": "SQL",
        "recovery_services_vault": {
            "id": "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
            "vault_type": "Existing",
        },
    },
    backup_name="dbBackup",
    connector_name="C1",
    location="westcentralus",
    resource_group_name="test-rg",
    tags={})
package main

import (
	workloads "github.com/pulumi/pulumi-azure-native-sdk/workloads/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := workloads.NewACSSBackupConnection(ctx, "acssBackupConnection", &workloads.ACSSBackupConnectionArgs{
			BackupData: &workloads.SqlBackupDataArgs{
				BackupPolicy: &workloads.DBBackupPolicyPropertiesArgs{
					Name: pulumi.String("defaultDbPolicy"),
				},
				BackupType: pulumi.String("SQL"),
				RecoveryServicesVault: workloads.ExistingRecoveryServicesVault{
					Id:        "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
					VaultType: "Existing",
				},
			},
			BackupName:        pulumi.String("dbBackup"),
			ConnectorName:     pulumi.String("C1"),
			Location:          pulumi.String("westcentralus"),
			ResourceGroupName: pulumi.String("test-rg"),
			Tags:              pulumi.StringMap{},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var acssBackupConnection = new AzureNative.Workloads.ACSSBackupConnection("acssBackupConnection", new()
    {
        BackupData = new AzureNative.Workloads.Inputs.SqlBackupDataArgs
        {
            BackupPolicy = new AzureNative.Workloads.Inputs.DBBackupPolicyPropertiesArgs
            {
                Name = "defaultDbPolicy",
            },
            BackupType = "SQL",
            RecoveryServicesVault = new AzureNative.Workloads.Inputs.ExistingRecoveryServicesVaultArgs
            {
                Id = "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
                VaultType = "Existing",
            },
        },
        BackupName = "dbBackup",
        ConnectorName = "C1",
        Location = "westcentralus",
        ResourceGroupName = "test-rg",
        Tags = null,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.workloads.ACSSBackupConnection;
import com.pulumi.azurenative.workloads.ACSSBackupConnectionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var acssBackupConnection = new ACSSBackupConnection("acssBackupConnection", ACSSBackupConnectionArgs.builder()
            .backupData(SqlBackupDataArgs.builder()
                .backupPolicy(DBBackupPolicyPropertiesArgs.builder()
                    .name("defaultDbPolicy")
                    .build())
                .backupType("SQL")
                .recoveryServicesVault(ExistingRecoveryServicesVaultArgs.builder()
                    .id("/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault")
                    .vaultType("Existing")
                    .build())
                .build())
            .backupName("dbBackup")
            .connectorName("C1")
            .location("westcentralus")
            .resourceGroupName("test-rg")
            .tags(Map.ofEntries(
            ))
            .build());

    }
}
resources:
  acssBackupConnection:
    type: azure-native:workloads:ACSSBackupConnection
    properties:
      backupData:
        backupPolicy:
          name: defaultDbPolicy
        backupType: SQL
        recoveryServicesVault:
          id: /subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault
          vaultType: Existing
      backupName: dbBackup
      connectorName: C1
      location: westcentralus
      resourceGroupName: test-rg
      tags: {}

The backupPolicy specifies only a name property, referencing an existing policy in the vault. The recoveryServicesVault uses vaultType “Existing” and provides the full resource ID. This pattern ensures consistent backup configuration across multiple database connections without duplicating policy definitions.

Connect VM backup to existing policy with disk filtering

VM backups can selectively include or exclude disks by LUN number, useful when certain disks contain temporary data that doesn’t require backup protection.

import * as pulumi from "@pulumi/pulumi";
import * as azure_native from "@pulumi/azure-native";

const acssBackupConnection = new azure_native.workloads.ACSSBackupConnection("acssBackupConnection", {
    backupData: {
        backupPolicy: {
            name: "defaultVmPolicy",
        },
        backupType: "VM",
        diskExclusionProperties: {
            diskLunList: [],
            isInclusionList: true,
        },
        recoveryServicesVault: {
            id: "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
            vaultType: "Existing",
        },
    },
    backupName: "vmBackup",
    connectorName: "C1",
    location: "westcentralus",
    resourceGroupName: "test-rg",
    tags: {},
});
import pulumi
import pulumi_azure_native as azure_native

acss_backup_connection = azure_native.workloads.ACSSBackupConnection("acssBackupConnection",
    backup_data={
        "backup_policy": {
            "name": "defaultVmPolicy",
        },
        "backup_type": "VM",
        "disk_exclusion_properties": {
            "disk_lun_list": [],
            "is_inclusion_list": True,
        },
        "recovery_services_vault": {
            "id": "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
            "vault_type": "Existing",
        },
    },
    backup_name="vmBackup",
    connector_name="C1",
    location="westcentralus",
    resource_group_name="test-rg",
    tags={})
package main

import (
	workloads "github.com/pulumi/pulumi-azure-native-sdk/workloads/v3"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := workloads.NewACSSBackupConnection(ctx, "acssBackupConnection", &workloads.ACSSBackupConnectionArgs{
			BackupData: &workloads.VMBackupDataArgs{
				BackupPolicy: &workloads.VMBackupPolicyPropertiesArgs{
					Name: pulumi.String("defaultVmPolicy"),
				},
				BackupType: pulumi.String("VM"),
				DiskExclusionProperties: &workloads.DiskExclusionPropertiesArgs{
					DiskLunList:     pulumi.IntArray{},
					IsInclusionList: pulumi.Bool(true),
				},
				RecoveryServicesVault: workloads.ExistingRecoveryServicesVault{
					Id:        "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
					VaultType: "Existing",
				},
			},
			BackupName:        pulumi.String("vmBackup"),
			ConnectorName:     pulumi.String("C1"),
			Location:          pulumi.String("westcentralus"),
			ResourceGroupName: pulumi.String("test-rg"),
			Tags:              pulumi.StringMap{},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using AzureNative = Pulumi.AzureNative;

return await Deployment.RunAsync(() => 
{
    var acssBackupConnection = new AzureNative.Workloads.ACSSBackupConnection("acssBackupConnection", new()
    {
        BackupData = new AzureNative.Workloads.Inputs.VMBackupDataArgs
        {
            BackupPolicy = new AzureNative.Workloads.Inputs.VMBackupPolicyPropertiesArgs
            {
                Name = "defaultVmPolicy",
            },
            BackupType = "VM",
            DiskExclusionProperties = new AzureNative.Workloads.Inputs.DiskExclusionPropertiesArgs
            {
                DiskLunList = new() { },
                IsInclusionList = true,
            },
            RecoveryServicesVault = new AzureNative.Workloads.Inputs.ExistingRecoveryServicesVaultArgs
            {
                Id = "/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault",
                VaultType = "Existing",
            },
        },
        BackupName = "vmBackup",
        ConnectorName = "C1",
        Location = "westcentralus",
        ResourceGroupName = "test-rg",
        Tags = null,
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azurenative.workloads.ACSSBackupConnection;
import com.pulumi.azurenative.workloads.ACSSBackupConnectionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var acssBackupConnection = new ACSSBackupConnection("acssBackupConnection", ACSSBackupConnectionArgs.builder()
            .backupData(VMBackupDataArgs.builder()
                .backupPolicy(VMBackupPolicyPropertiesArgs.builder()
                    .name("defaultVmPolicy")
                    .build())
                .backupType("VM")
                .diskExclusionProperties(DiskExclusionPropertiesArgs.builder()
                    .diskLunList()
                    .isInclusionList(true)
                    .build())
                .recoveryServicesVault(ExistingRecoveryServicesVaultArgs.builder()
                    .id("/subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault")
                    .vaultType("Existing")
                    .build())
                .build())
            .backupName("vmBackup")
            .connectorName("C1")
            .location("westcentralus")
            .resourceGroupName("test-rg")
            .tags(Map.ofEntries(
            ))
            .build());

    }
}
resources:
  acssBackupConnection:
    type: azure-native:workloads:ACSSBackupConnection
    properties:
      backupData:
        backupPolicy:
          name: defaultVmPolicy
        backupType: VM
        diskExclusionProperties:
          diskLunList: []
          isInclusionList: true
        recoveryServicesVault:
          id: /subscriptions/6d875e77-e412-4d7d-9af4-8895278b4443/resourceGroups/test-rg/providers/Microsoft.RecoveryServices/vaults/test-vault
          vaultType: Existing
      backupName: vmBackup
      connectorName: C1
      location: westcentralus
      resourceGroupName: test-rg
      tags: {}

The diskExclusionProperties block controls disk selection. An empty diskLunList with isInclusionList true includes all disks; to exclude specific disks, set isInclusionList to false and list LUN numbers. The backupPolicy references an existing policy by name, avoiding policy duplication across VM backups.

Beyond these examples

These snippets focus on specific backup connection features: backup policy configuration (retention schedules, tiering, compression), vault management (new vs existing Recovery Services vaults), and workload-specific settings (HANA SSL, SQL compression, VM disk filtering). They’re intentionally minimal rather than full backup solutions.

The examples may reference pre-existing infrastructure such as SAP HANA instances, SQL Server instances, or Azure VMs to protect, Recovery Services vaults (when using vaultType: Existing), backup policies (when referencing existing policies by name), and SSL certificates and PSE files (for HANA connections). They focus on configuring the backup connection rather than provisioning the underlying workloads or vault infrastructure.

To keep things focused, common backup patterns are omitted, including:

  • Backup monitoring and alerting configuration
  • Cross-region vault replication settings
  • Backup job scheduling and throttling controls
  • Restore testing and validation procedures

These omissions are intentional: the goal is to illustrate how each backup connection feature is wired, not provide drop-in backup modules. See the ACSSBackupConnection resource reference for all available configuration options.

Let's configure Azure SAP ACSS Backup Connections

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Backup Configuration
What backup types are supported for SAP workloads?
You can configure HANA, SQL, or VM backups by setting backupType to HANA, SQL, or VM.
Can I use an existing Recovery Services vault?
Yes, set vaultType to Existing and provide the vault id. Alternatively, use New to create a vault by specifying name and resourceGroup.
How do I reference an existing backup policy instead of creating a new one?
Provide only the policy name in backupPolicy instead of the full policy definition with retention and schedule details.
Retention & Tiering
What retention schedules can I configure?
Backup policies support daily, weekly, monthly, and yearly retention schedules. Each schedule specifies retention duration (count and durationType like Days, Weeks, Months, Years) and retention times.
What's the difference between TierAfter and DoNotTier tiering modes?
TierAfter archives recovery points after a specified duration, while DoNotTier keeps them in the original tier. Configure this in tieringPolicy.ArchivedRP.
Workload-Specific Settings
What additional configuration is required for HANA backups?
HANA backups require hdbuserstoreKeyName, instanceNumber, and optionally sslConfiguration (with sslCryptoProvider, sslHostNameInCertificate, sslKeyStore, sslTrustStore). You can also configure dbInstanceSnapshotBackupPolicy for snapshot backups.
How do I exclude specific disks from VM backups?
Use diskExclusionProperties with diskLunList (array of LUN numbers) and set isInclusionList to true for inclusion or false for exclusion.
Resource Management
Which properties can't be changed after creation?
location, backupName, connectorName, and resourceGroupName are immutable.
How do I check the provisioning status of my backup connection?
Check the provisioningState output property, which indicates the current provisioning state.

Using a different cloud?

Explore storage guides for other cloud providers: