Help us shape the future of Go! Take the 2026 Go Developer Survey

backup

package
v1.8.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2026 License: MIT Imports: 40 Imported by: 0

README

Backup

Parity grade: A · SDK aws-sdk-go-v2/service/backup@v1.64.0 · last audited 2026-10-12 (b7c35baea)

Coverage

Metric Value
PARITY entries audited 66 (64 ok, 2 partial)
Feature families 18 (17 ok, 1 partial)
Known gaps 2
Structural gaps (can't be emulated) 3
Deferred items 0
Resource leaks clean
Known gaps
  • Report file column names are best-effort: the SDK documents only the key path (/Backup/////), not the CSV/JSON columns, so headers are derived from the backend's own job fields rather than verified against AWS output. Compliance templates carry only protected-resource or framework-ARN rows (no control evaluation).
  • Restore recreates DynamoDB tables (schema, indexes, items), S3 buckets (objects) and EBS volumes (shape only); EC2 instances, EFS, RDS and other types keep the synthesized CreatedResourceArn. Recovery-point snapshots are held in memory and persisted with the recovery point, so large buckets inflate state.
Structural gaps

These do not block an A grade — no implementation could produce real data here because the underlying data source cannot exist in an emulator.

  • MPA session approval, GuardDuty malware scanning (PITR results, ScanActions/ScanSettings), the search-index subsystem and cross-account logically-air-gapped vaults are external systems with no emulator counterpart.
  • CreatedBy on scan jobs and recovery points: plans never run on a schedule here, so every recovery point comes from an on-demand job with no plan or rule lineage (ByBackupPlanId likewise matches nothing).
  • StartBackupJob CompleteWindowMinutes and StartRestoreJob CopySourceTagsToRestoredResource: backup jobs finish instantly (no window to expire) and restored resources do not copy source tags.

More

Documentation

Index

Constants

View Source
const (
	VaultTypeBackupVault = "BACKUP_VAULT"
	VaultTypeAirGapped   = "LOGICALLY_AIR_GAPPED_BACKUP_VAULT"
)

Variables

View Source
var (
	ErrNotFound      = awserr.New("ResourceNotFoundException", awserr.ErrNotFound)
	ErrAlreadyExists = awserr.New("AlreadyExistsException", awserr.ErrConflict)
	ErrValidation    = awserr.New("InvalidParameterValueException", awserr.ErrInvalidParameter)
	// ErrInvalidRequest is for state-conflict validation failures (e.g.
	// deleting a non-empty or locked vault) that real AWS Backup reports as
	// InvalidRequestException rather than InvalidParameterValueException.
	ErrInvalidRequest = awserr.New("InvalidRequestException", awserr.ErrConflict)
)

Wire error codes match the real AWS Backup service-2.json model exactly (verified against botocore's backup/2018-11-15 model): every one of Backup's client-fault exceptions (ResourceNotFoundException, AlreadyExistsException, InvalidParameterValueException, MissingParameterValueException, InvalidRequestException, ...) has no explicit httpStatusCode override in the model, so the restJson1 protocol default of HTTP 400 applies uniformly -- Backup does NOT use 404 for not-found or 409 for conflict the way many other REST-JSON services do. "ValidationException" is NOT a real AWS Backup error code (gopherstack invention, since deleted); the real generic client-fault codes are InvalidParameterValueException / MissingParameterValueException, chosen in handleError based on whether the message names a missing field.

View Source
var ErrInvalidScheduleExpression = errors.New("invalid schedule expression")

ErrInvalidScheduleExpression is returned when a plan rule's ScheduleExpression cannot be parsed as an AWS cron(...) expression.

Functions

func ParseTimeFilter

func ParseTimeFilter(s string) *time.Time

ParseTimeFilter parses an RFC3339 timestamp string into a *time.Time. Returns nil if the string is empty or invalid.

Types

type AccessPoint

type AccessPoint struct {
	CreationTime        time.Time         `json:"creationTime"`
	Tags                *tags.Tags        `json:"tags,omitempty"`
	AccessPointMetadata map[string]string `json:"accessPointMetadata,omitempty"`
	AccessPointArn      string            `json:"accessPointArn"`
	Name                string            `json:"name"`
	AccessPointPolicy   string            `json:"accessPointPolicy,omitempty"`
	BackupVaultName     string            `json:"backupVaultName"`
	BackupVaultArn      string            `json:"backupVaultArn,omitempty"`
	RecoveryPointArn    string            `json:"recoveryPointArn"`
	ResourceArn         string            `json:"resourceArn"`
	ResourceType        string            `json:"resourceType"`
	Status              string            `json:"status"`
	StatusMessage       string            `json:"statusMessage,omitempty"`
}

AccessPoint models an AWS Backup access point (backup@v1.64.0 api_op_{Create,Describe,List}BackupAccessPoint*.go / types.ListAccessPointsMember): on-demand, read-only access to one existing S3 recovery point through an Amazon S3 access point, without initiating a restore. Keyed by AccessPointArn. Named AccessPoint, not BackupAccessPoint, to avoid the package-name stutter (backup.BackupAccessPoint) revive flags -- CreateBackupAccessPoint et al keep the AWS operation name unchanged; only this Go type is shortened.

type AdvancedBackupSetting

type AdvancedBackupSetting struct {
	BackupOptions map[string]string `json:"backupOptions,omitempty"`
	ResourceType  string            `json:"resourceType"`
}

AdvancedBackupSetting enables resource-type-specific backup options (e.g., Windows VSS).

type CalculatedLifecycle

type CalculatedLifecycle struct {
	MoveToColdStorageAt *time.Time `json:"moveToColdStorageAt,omitempty"`
	DeleteAt            *time.Time `json:"deleteAt,omitempty"`
}

CalculatedLifecycle holds computed lifecycle transition timestamps for a recovery point.

type ConfigProvider

type ConfigProvider interface {
	GetBackupSettings() Settings
}

ConfigProvider is a private interface to extract Backup configuration from the abstract AppContext Config.

type ControlInputParameter added in v1.2.0

type ControlInputParameter struct {
	ParameterName  string `json:"parameterName"`
	ParameterValue string `json:"parameterValue"`
}

ControlInputParameter is a single name/value pair configuring a framework control (e.g. ParameterName "requiredRetentionDays", ParameterValue "35").

type ControlScope added in v1.2.0

type ControlScope struct {
	Tags                    map[string]string `json:"tags,omitempty"`
	ComplianceResourceIDs   []string          `json:"complianceResourceIds,omitempty"`
	ComplianceResourceTypes []string          `json:"complianceResourceTypes,omitempty"`
}

ControlScope defines what a framework control evaluates: specific resource IDs, resource types, and/or a single tag key/value pair.

type CopyAction

type CopyAction struct {
	DestinationBackupVaultArn string    `json:"destinationBackupVaultArn"`
	Lifecycle                 Lifecycle `json:"lifecycle,omitzero"`
}

CopyAction defines a cross-vault copy triggered by a backup rule.

type CopyJob

type CopyJob struct {
	CreationDate                time.Time  `json:"creationDate"`
	CompletionDate              *time.Time `json:"completionDate,omitempty"`
	SettleAt                    *time.Time `json:"settleAt,omitempty"`
	Lifecycle                   *Lifecycle `json:"lifecycle,omitempty"`
	CopyJobID                   string     `json:"copyJobId"`
	SourceBackupVaultArn        string     `json:"sourceBackupVaultArn,omitempty"`
	SourceRecoveryPointArn      string     `json:"sourceRecoveryPointArn,omitempty"`
	DestinationBackupVaultArn   string     `json:"destinationBackupVaultArn,omitempty"`
	DestinationRecoveryPointArn string     `json:"destinationRecoveryPointArn,omitempty"`
	ResourceArn                 string     `json:"resourceArn,omitempty"`
	ResourceType                string     `json:"resourceType,omitempty"`
	IAMRoleArn                  string     `json:"iamRoleArn,omitempty"`
	StatusMessage               string     `json:"statusMessage,omitempty"`
	State                       string     `json:"state"`
	AccountID                   string     `json:"accountId"`
	Region                      string     `json:"region"`
}

CopyJob represents an AWS Backup copy job.

type CreateOptions

type CreateOptions struct {
	Tags             map[string]string
	IdempotencyToken string
}

CreateOptions carries the optional Create* request members that sit beside a resource's identity: initial tags and the idempotency token.

type DateRange added in v1.2.0

type DateRange struct {
	FromDate *time.Time `json:"fromDate,omitempty"`
	ToDate   *time.Time `json:"toDate,omitempty"`
}

DateRange is an inclusive Unix-time window ([FromDate, ToDate]) used to filter recovery points by CreationDate.

type DeletedPlan

type DeletedPlan struct {
	CreationTime   time.Time `json:"creationTime"`
	DeletionTime   time.Time `json:"deletionTime"`
	BackupPlanName string    `json:"backupPlanName"`
	BackupPlanArn  string    `json:"backupPlanArn"`
	BackupPlanID   string    `json:"backupPlanId"`
	VersionID      string    `json:"versionId"`
}

DeletedPlan is the tombstone ListBackupPlans serves when IncludeDeleted is true.

type DynamoDBBackend

DynamoDBBackend is the DynamoDB surface used to snapshot and restore tables.

type Framework

type Framework struct {
	CreationTime         time.Time          `json:"creationTime"`
	IdempotencyToken     string             `json:"idempotencyToken,omitempty"`
	Tags                 *tags.Tags         `json:"tags,omitempty"`
	FrameworkName        string             `json:"frameworkName"`
	FrameworkArn         string             `json:"frameworkArn"`
	FrameworkDescription string             `json:"frameworkDescription,omitempty"`
	FrameworkStatus      string             `json:"frameworkStatus,omitempty"`
	DeploymentStatus     string             `json:"deploymentStatus,omitempty"`
	FrameworkControls    []FrameworkControl `json:"frameworkControls,omitempty"`
}

Framework represents an AWS Backup audit framework.

type FrameworkControl

type FrameworkControl struct {
	ControlScope           *ControlScope           `json:"controlScope,omitempty"`
	ControlName            string                  `json:"controlName"`
	ControlInputParameters []ControlInputParameter `json:"controlInputParameters,omitempty"`
}

FrameworkControl represents a compliance control within an audit framework.

type Handler

type Handler struct {
	Backend *InMemoryBackend
	// contains filtered or unexported fields
}

Handler is the Echo HTTP handler for AWS Backup operations (REST-JSON protocol).

func NewHandler

func NewHandler(backend *InMemoryBackend) *Handler

NewHandler creates a new Backup handler.

func (*Handler) ChaosOperations

func (h *Handler) ChaosOperations() []string

ChaosOperations returns all operations that can be fault-injected.

func (*Handler) ChaosRegions

func (h *Handler) ChaosRegions() []string

ChaosRegions returns all regions this Backup instance handles.

func (*Handler) ChaosServiceName

func (h *Handler) ChaosServiceName() string

ChaosServiceName returns the lowercase AWS service name for fault rule matching.

func (*Handler) EnableRegions

func (h *Handler) EnableRegions(ctx context.Context)

EnableRegions makes h serve every other region through lazily built per-region siblings, each with its own janitor running under ctx.

func (*Handler) ExtractOperation

func (h *Handler) ExtractOperation(c *echo.Context) string

ExtractOperation extracts the Backup operation name from the REST path.

func (*Handler) ExtractResource

func (h *Handler) ExtractResource(c *echo.Context) string

ExtractResource extracts the primary resource identifier from the URL path.

func (*Handler) GetSupportedOperations

func (h *Handler) GetSupportedOperations() []string

GetSupportedOperations returns the list of supported Backup operations.

func (*Handler) Handler

func (h *Handler) Handler() echo.HandlerFunc

Handler returns the Echo handler function for Backup requests.

func (*Handler) MatchPriority

func (h *Handler) MatchPriority() int

MatchPriority returns the routing priority.

func (*Handler) Name

func (h *Handler) Name() string

Name returns the service name.

func (*Handler) RegionHandler

func (h *Handler) RegionHandler(region string) *Handler

RegionHandler returns the handler serving region: h itself for the home region, else its sibling.

func (*Handler) Reset

func (h *Handler) Reset()

Reset implements service.Resettable by delegating to the backend.

func (*Handler) Restore

func (h *Handler) Restore(ctx context.Context, data []byte) error

Restore implements persistence.Persistable.

func (*Handler) RouteMatcher

func (h *Handler) RouteMatcher() service.Matcher

RouteMatcher returns a function that matches AWS Backup REST requests.

func (*Handler) Snapshot

func (h *Handler) Snapshot(ctx context.Context) []byte

Snapshot implements persistence.Persistable; other regions ride in an additive "regions" key.

func (*Handler) StartWorker

func (h *Handler) StartWorker(ctx context.Context) error

StartWorker starts the background janitor if configured.

func (*Handler) WithJanitor

func (h *Handler) WithJanitor(
	interval, jobTTL time.Duration,
	taskTimeout ...time.Duration,
) *Handler

WithJanitor attaches a background janitor to the handler. The optional taskTimeout bounds each sweep; 0 means no per-task timeout.

type InMemoryBackend

type InMemoryBackend struct {
	// contains filtered or unexported fields
}

InMemoryBackend is the in-memory store for AWS Backup resources.

Resource collections are *store.Table[T] (see pkgs/store's package doc), every one registered on registry so Snapshot/Restore covers it -- see store_setup.go. A handful of maps remain plain map[string]string because their values are not *T (mirroring services/ses's "policies" precedent).

func NewInMemoryBackend

func NewInMemoryBackend(accountID, region string) *InMemoryBackend

NewInMemoryBackend creates a new in-memory Backup backend.

func (*InMemoryBackend) AccountID

func (b *InMemoryBackend) AccountID() string

AccountID returns the AWS account ID this backend is configured for.

func (*InMemoryBackend) AddRecoveryPoint

func (b *InMemoryBackend) AddRecoveryPoint(vaultName string, rp *RecoveryPoint) error

AddRecoveryPoint adds a recovery point to a vault (used internally and in tests).

func (*InMemoryBackend) AssociateBackupVaultMpaApprovalTeam

func (b *InMemoryBackend) AssociateBackupVaultMpaApprovalTeam(
	vaultName, mpaApprovalTeamArn string,
) error

AssociateBackupVaultMpaApprovalTeam associates an MPA approval team with a backup vault.

func (*InMemoryBackend) CancelLegalHold

func (b *InMemoryBackend) CancelLegalHold(legalHoldID, description string, retainRecordInDays int64) error

CancelLegalHold marks a legal hold CANCELED. A positive retainRecordInDays drops the record after that many days; otherwise it stays readable.

func (*InMemoryBackend) CompleteBackupJob

func (b *InMemoryBackend) CompleteBackupJob(jobID string) error

CompleteBackupJob finishes a CREATED or RUNNING job and creates its recovery point. A job whose lifecycle breaks the destination vault's lock retention bounds FAILS instead, as the PutBackupVaultLockConfiguration docs describe.

func (*InMemoryBackend) CreateBackupAccessPoint

func (b *InMemoryBackend) CreateBackupAccessPoint(
	name, recoveryPointArn, accessPointPolicy string,
	metadata, kv map[string]string,
) (*AccessPoint, error)

CreateBackupAccessPoint creates a backup access point exposing an existing recovery point for on-demand, read-only access via an Amazon S3 access point (backup@v1.64.0 api_op_CreateBackupAccessPoint.go). Real AWS requires the recovery point to be an S3 recovery point in the AVAILABLE/STOPPED/COMPLETED state; this backend requires it to exist at all and stays permissive on ResourceType/status, the same unwired-hook-stays-permissive convention StartBackupJob's ResourceArn check documents (gopherstack-0o0q) -- rejecting on a distinction this backend doesn't track everywhere would be a fabricated rejection. Starts in CREATING; the Janitor (advanceBackupAccessPoints) advances it to AVAILABLE on the next sweep, mirroring advanceRestoreAccessVaults.

func (*InMemoryBackend) CreateBackupPlan

func (b *InMemoryBackend) CreateBackupPlan(
	planName string,
	rules []Rule,
	advancedSettings []AdvancedBackupSetting,
	kv map[string]string,
) (*Plan, error)

CreateBackupPlan creates a new backup plan.

func (*InMemoryBackend) CreateBackupPlanValidated

func (b *InMemoryBackend) CreateBackupPlanValidated(
	planName string,
	rules []Rule,
	advancedSettings []AdvancedBackupSetting,
	kv map[string]string,
) (*Plan, error)

CreateBackupPlanValidated creates a backup plan after validating its rules.

func (*InMemoryBackend) CreateBackupSelection

func (b *InMemoryBackend) CreateBackupSelection(
	planID, selectionName, iamRoleArn string,
	resources, notResources []string,
	listOfTags []TagCondition,
	conditions *SelectionConditions,
) (*Selection, error)

CreateBackupSelection creates a backup selection for a plan.

func (*InMemoryBackend) CreateBackupVault

func (b *InMemoryBackend) CreateBackupVault(
	name, encryptionKeyArn, creatorRequestID string,
	kv map[string]string,
) (*Vault, error)

CreateBackupVault creates a new backup vault.

func (*InMemoryBackend) CreateFramework

func (b *InMemoryBackend) CreateFramework(
	name, description string,
	controls []FrameworkControl,
) (*Framework, error)

CreateFramework creates an audit framework.

func (*InMemoryBackend) CreateFrameworkWithOptions

func (b *InMemoryBackend) CreateFrameworkWithOptions(
	name, description string,
	controls []FrameworkControl,
	opts CreateOptions,
) (*Framework, error)

CreateFrameworkWithOptions is CreateFramework with FrameworkTags and IdempotencyToken; a retry with the same token returns the existing framework.

func (*InMemoryBackend) CreateLegalHold

func (b *InMemoryBackend) CreateLegalHold(
	title, description string,
	sel *RecoveryPointSelection,
) (*LegalHold, error)

CreateLegalHold creates a legal hold. sel (RecoveryPointSelection) is stored on the hold and is what ListRecoveryPointsByLegalHold filters against; a nil or all-empty selection covers every recovery point.

func (*InMemoryBackend) CreateLegalHoldWithToken

func (b *InMemoryBackend) CreateLegalHoldWithToken(
	title, description string,
	sel *RecoveryPointSelection,
	token string,
) (*LegalHold, error)

CreateLegalHoldWithToken is CreateLegalHold with an IdempotencyToken; a retry with the same token returns the hold it created.

func (*InMemoryBackend) CreateLogicallyAirGappedBackupVault

func (b *InMemoryBackend) CreateLogicallyAirGappedBackupVault(
	name, encryptionKeyArn, creatorRequestID string,
	minRetentionDays, maxRetentionDays int64,
	kv map[string]string,
) (*Vault, error)

CreateLogicallyAirGappedBackupVault creates a logically air-gapped backup vault.

func (*InMemoryBackend) CreateReportPlan

func (b *InMemoryBackend) CreateReportPlan(
	name, description string,
	deliveryChannel *ReportDeliveryChannel,
	setting *ReportSetting,
) (*ReportPlan, error)

CreateReportPlan creates a report plan.

func (*InMemoryBackend) CreateReportPlanWithOptions

func (b *InMemoryBackend) CreateReportPlanWithOptions(
	name, description string,
	deliveryChannel *ReportDeliveryChannel,
	setting *ReportSetting,
	opts CreateOptions,
) (*ReportPlan, error)

CreateReportPlanWithOptions is CreateReportPlan with ReportPlanTags and IdempotencyToken; a retry with the same token returns the existing plan.

func (*InMemoryBackend) CreateRestoreAccessBackupVault

func (b *InMemoryBackend) CreateRestoreAccessBackupVault(
	sourceVaultArn, vaultName, creatorRequestID string,
	kv map[string]string,
) (*RestoreAccessVault, error)

CreateRestoreAccessBackupVault creates a restore access backup vault. sourceVaultArn must resolve to an existing backup vault (real AWS: the SOURCE of a restore access vault is always a logically air-gapped vault) -- ListRestoreAccessBackupVaults and RevokeRestoreAccessBackupVault both key off that source vault's NAME (see their real nested /logically-air-gapped-backup-vaults/{BackupVaultName}/... paths), so the name is resolved and stored here rather than re-derived from the ARN later.

func (*InMemoryBackend) CreateRestoreTestingPlan

func (b *InMemoryBackend) CreateRestoreTestingPlan(
	name, scheduleExpression string,
	startWindowHours int64,
	recoveryPointSelection *RestoreTestingRecoveryPointSelection,
	kv map[string]string,
) (*RestoreTestingPlan, error)

CreateRestoreTestingPlan creates a restore testing plan. RecoveryPointSelection is required on the real RestoreTestingPlanForCreate (validators.go:2400-2419 rejects a nil value) and on RestoreTestingPlanForGet, so it must always come out non-nil -- if the caller passed nil (only reachable via a raw request bypassing the SDK's own client-side validation), a genuinely-empty selection is stored instead of leaving the required member absent.

func (*InMemoryBackend) CreateRestoreTestingSelection

func (b *InMemoryBackend) CreateRestoreTestingSelection(
	planName, selectionName string,
	in RestoreTestingSelectionInput,
) (*RestoreTestingSelection, error)

CreateRestoreTestingSelection creates a selection within a restore testing plan. IAMRoleArn and ProtectedResourceType are required by the real RestoreTestingSelectionForCreate shape.

func (*InMemoryBackend) CreateTieringConfiguration

func (b *InMemoryBackend) CreateTieringConfiguration(
	name, vaultName string,
	sel []ResourceSelection,
	creatorRequestID string,
) (*TieringConfiguration, error)

CreateTieringConfiguration creates a tiering configuration. name is the unique TieringConfigurationName (the real AWS key for this resource family); vaultName is "*" to apply to all vaults or a specific vault name. Idempotent: a repeat call with the same creatorRequestID returns the existing configuration instead of AlreadyExistsException.

func (*InMemoryBackend) DeleteBackupAccessPoint

func (b *InMemoryBackend) DeleteBackupAccessPoint(accessPointArn string) error

DeleteBackupAccessPoint deletes a backup access point by ARN.

func (*InMemoryBackend) DeleteBackupPlan

func (b *InMemoryBackend) DeleteBackupPlan(idOrName string) error

DeleteBackupPlan deletes a backup plan by ID or name.

func (*InMemoryBackend) DeleteBackupPlanChecked

func (b *InMemoryBackend) DeleteBackupPlanChecked(idOrName string) (*Plan, error)

DeleteBackupPlanChecked deletes a backup plan, returning an error if selections exist.

func (*InMemoryBackend) DeleteBackupSelection

func (b *InMemoryBackend) DeleteBackupSelection(planID, selectionID string) error

DeleteBackupSelection deletes a backup selection.

func (*InMemoryBackend) DeleteBackupVault

func (b *InMemoryBackend) DeleteBackupVault(name string) error

DeleteBackupVault deletes a vault by name.

func (*InMemoryBackend) DeleteBackupVaultAccessPolicy

func (b *InMemoryBackend) DeleteBackupVaultAccessPolicy(vaultName string) error

DeleteBackupVaultAccessPolicy deletes the access policy for a vault.

func (*InMemoryBackend) DeleteBackupVaultChecked

func (b *InMemoryBackend) DeleteBackupVaultChecked(name string) error

DeleteBackupVaultChecked deletes a vault, enforcing lock and recovery point constraints.

func (*InMemoryBackend) DeleteBackupVaultLockConfiguration

func (b *InMemoryBackend) DeleteBackupVaultLockConfiguration(vaultName string) error

DeleteBackupVaultLockConfiguration deletes the lock configuration for a vault. PutBackupVaultLockConfiguration's own doc comment: "On and after the lock date, the Vault Lock becomes immutable and cannot be changed or deleted" -- PutBackupVaultLockConfiguration already enforces this for updates; this was its unenforced sibling for deletes.

func (*InMemoryBackend) DeleteBackupVaultNotifications

func (b *InMemoryBackend) DeleteBackupVaultNotifications(vaultName string) error

DeleteBackupVaultNotifications deletes notification configuration for a vault.

func (*InMemoryBackend) DeleteFramework

func (b *InMemoryBackend) DeleteFramework(name string) error

DeleteFramework deletes a framework.

func (*InMemoryBackend) DeleteRecoveryPoint

func (b *InMemoryBackend) DeleteRecoveryPoint(vaultName, recoveryPointArn string) error

DeleteRecoveryPoint deletes a recovery point from a vault.

func (*InMemoryBackend) DeleteReportPlan

func (b *InMemoryBackend) DeleteReportPlan(name string) error

DeleteReportPlan deletes a report plan.

func (*InMemoryBackend) DeleteRestoreTestingPlan

func (b *InMemoryBackend) DeleteRestoreTestingPlan(planName string) error

DeleteRestoreTestingPlan deletes a restore testing plan. Real AWS (api_op_DeleteRestoreTestingPlan.go) says deletion can only succeed if all associated restore testing selections are deleted first.

func (*InMemoryBackend) DeleteRestoreTestingSelection

func (b *InMemoryBackend) DeleteRestoreTestingSelection(planName, selectionName string) error

DeleteRestoreTestingSelection deletes a restore testing selection.

func (*InMemoryBackend) DeleteTieringConfiguration

func (b *InMemoryBackend) DeleteTieringConfiguration(name string) error

DeleteTieringConfiguration removes a tiering configuration by name.

func (*InMemoryBackend) DescribeBackupAccessPoint

func (b *InMemoryBackend) DescribeBackupAccessPoint(accessPointArn string) (*AccessPoint, error)

DescribeBackupAccessPoint returns a backup access point by ARN.

func (*InMemoryBackend) DescribeBackupJob

func (b *InMemoryBackend) DescribeBackupJob(jobID string) (*Job, error)

DescribeBackupJob returns a backup job by ID.

func (*InMemoryBackend) DescribeBackupVault

func (b *InMemoryBackend) DescribeBackupVault(name string) (*Vault, error)

DescribeBackupVault returns a vault by name.

func (*InMemoryBackend) DescribeCopyJob

func (b *InMemoryBackend) DescribeCopyJob(copyJobID string) (*CopyJob, error)

DescribeCopyJob returns a copy job by ID.

func (*InMemoryBackend) DescribeFramework

func (b *InMemoryBackend) DescribeFramework(name string) (*Framework, error)

DescribeFramework returns a framework by name.

func (*InMemoryBackend) DescribeGlobalSettings

func (b *InMemoryBackend) DescribeGlobalSettings() (map[string]string, time.Time)

DescribeGlobalSettings returns the account-level global backup settings.

func (*InMemoryBackend) DescribeProtectedResource

func (b *InMemoryBackend) DescribeProtectedResource(
	resourceArn string,
) (*ProtectedResource, error)

DescribeProtectedResource returns a protected resource by ARN.

func (*InMemoryBackend) DescribeRecoveryPoint

func (b *InMemoryBackend) DescribeRecoveryPoint(
	vaultName, recoveryPointArn string,
) (*RecoveryPoint, error)

DescribeRecoveryPoint returns a specific recovery point.

func (*InMemoryBackend) DescribeRegionSettings

func (b *InMemoryBackend) DescribeRegionSettings() *RegionSettings

DescribeRegionSettings returns the regional backup preferences.

func (*InMemoryBackend) DescribeReportJob

func (b *InMemoryBackend) DescribeReportJob(reportJobID string) (*ReportJob, error)

DescribeReportJob returns a report job by ID.

func (*InMemoryBackend) DescribeReportPlan

func (b *InMemoryBackend) DescribeReportPlan(name string) (*ReportPlan, error)

DescribeReportPlan returns a report plan by name.

func (*InMemoryBackend) DescribeRestoreJob

func (b *InMemoryBackend) DescribeRestoreJob(restoreJobID string) (*RestoreJob, error)

DescribeRestoreJob returns a restore job by ID.

func (*InMemoryBackend) DescribeScanJob

func (b *InMemoryBackend) DescribeScanJob(scanJobID string) (*ScanJob, error)

DescribeScanJob returns a scan job by ID.

func (*InMemoryBackend) DisassociateBackupVaultMpaApprovalTeam

func (b *InMemoryBackend) DisassociateBackupVaultMpaApprovalTeam(vaultName string) error

DisassociateBackupVaultMpaApprovalTeam removes the MPA approval team for a vault.

func (*InMemoryBackend) DisassociateRecoveryPoint

func (b *InMemoryBackend) DisassociateRecoveryPoint(vaultName, recoveryPointArn string) error

DisassociateRecoveryPoint disassociates a recovery point from a vault.

func (*InMemoryBackend) DisassociateRecoveryPointFromParent

func (b *InMemoryBackend) DisassociateRecoveryPointFromParent(
	vaultName, recoveryPointArn string,
) error

DisassociateRecoveryPointFromParent disassociates a recovery point from its parent.

func (*InMemoryBackend) ExportBackupPlanTemplate

func (b *InMemoryBackend) ExportBackupPlanTemplate(planID string) (string, error)

ExportBackupPlanTemplate exports a plan as a template JSON string.

func (*InMemoryBackend) GetBackupPlan

func (b *InMemoryBackend) GetBackupPlan(idOrName string) (*Plan, error)

GetBackupPlan returns a backup plan by ID or name.

func (*InMemoryBackend) GetBackupSelection

func (b *InMemoryBackend) GetBackupSelection(planID, selectionID string) (*Selection, error)

GetBackupSelection returns a specific backup selection.

func (*InMemoryBackend) GetBackupVaultAccessPolicy

func (b *InMemoryBackend) GetBackupVaultAccessPolicy(vaultName string) (*VaultAccessPolicy, error)

GetBackupVaultAccessPolicy returns the access policy for a vault.

func (*InMemoryBackend) GetBackupVaultLockConfig

func (b *InMemoryBackend) GetBackupVaultLockConfig(vaultName string) (*VaultLockConfig, error)

GetBackupVaultLockConfig returns the lock configuration for a vault.

func (*InMemoryBackend) GetBackupVaultNotifications

func (b *InMemoryBackend) GetBackupVaultNotifications(
	vaultName string,
) (*VaultNotificationConfig, error)

GetBackupVaultNotifications returns notification configuration for a vault.

func (*InMemoryBackend) GetLegalHold

func (b *InMemoryBackend) GetLegalHold(legalHoldID string) (*LegalHold, error)

GetLegalHold returns a legal hold by ID.

func (*InMemoryBackend) GetRecoveryPointIndexDetails

func (b *InMemoryBackend) GetRecoveryPointIndexDetails(
	vaultName, recoveryPointArn string,
) (string, error)

GetRecoveryPointIndexDetails returns index details for a recovery point.

func (*InMemoryBackend) GetRecoveryPointRestoreMetadata

func (b *InMemoryBackend) GetRecoveryPointRestoreMetadata(
	vaultName, recoveryPointArn string,
) (map[string]string, error)

GetRecoveryPointRestoreMetadata returns restore metadata for a recovery point.

func (*InMemoryBackend) GetRestoreTestingPlan

func (b *InMemoryBackend) GetRestoreTestingPlan(planName string) (*RestoreTestingPlan, error)

GetRestoreTestingPlan returns a restore testing plan by name.

func (*InMemoryBackend) GetRestoreTestingSelection

func (b *InMemoryBackend) GetRestoreTestingSelection(
	planName, selectionName string,
) (*RestoreTestingSelection, error)

GetRestoreTestingSelection returns a specific restore testing selection.

func (*InMemoryBackend) GetTieringConfiguration

func (b *InMemoryBackend) GetTieringConfiguration(name string) (*TieringConfiguration, error)

GetTieringConfiguration returns the tiering configuration for the given name.

func (*InMemoryBackend) GetVaultMpaApprovalTeamArn added in v1.2.0

func (b *InMemoryBackend) GetVaultMpaApprovalTeamArn(vaultName string) (string, bool)

GetVaultMpaApprovalTeamArn returns the MPA approval team ARN associated with vaultName (via AssociateBackupVaultMpaApprovalTeam), and false if none is associated. Surfaced by DescribeBackupVault's MpaApprovalTeamArn field.

func (*InMemoryBackend) IsVaultLocked

func (b *InMemoryBackend) IsVaultLocked(vaultName string) bool

IsVaultLocked reports whether the vault's lock date has passed (vault is now immutable).

func (*InMemoryBackend) ListBackupAccessPoints

func (b *InMemoryBackend) ListBackupAccessPoints(
	maxResults int, nextToken string,
) ([]*AccessPoint, string)

ListBackupAccessPoints returns every backup access point in the account/region.

func (*InMemoryBackend) ListBackupAccessPointsByRecoveryPoint

func (b *InMemoryBackend) ListBackupAccessPointsByRecoveryPoint(
	recoveryPointArn string, maxResults int, nextToken string,
) ([]*AccessPoint, string)

ListBackupAccessPointsByRecoveryPoint returns the backup access points created from the given recovery point ARN. Permissive on an unknown recovery point ARN (returns an empty page), matching this service's other List* filters over a store rather than validating the filter's target.

func (*InMemoryBackend) ListBackupAccessPointsByResource

func (b *InMemoryBackend) ListBackupAccessPointsByResource(
	resourceArn string, maxResults int, nextToken string,
) ([]*AccessPoint, string)

ListBackupAccessPointsByResource returns the backup access points associated with the given backed-up resource ARN.

func (*InMemoryBackend) ListBackupJobSummaries

func (b *InMemoryBackend) ListBackupJobSummaries(f JobSummaryFilter) []map[string]any

ListBackupJobSummaries counts backup jobs per aggregation window, resource type, state and message category.

func (*InMemoryBackend) ListBackupJobs

func (b *InMemoryBackend) ListBackupJobs(vaultName string) []*Job

ListBackupJobs returns all backup jobs, optionally filtered by vault name. Results are sorted by creation time (newest first).

func (*InMemoryBackend) ListBackupJobsFiltered

func (b *InMemoryBackend) ListBackupJobsFiltered(f ListBackupJobsFilter) ([]*Job, string)

ListBackupJobsFiltered returns backup jobs matching the filter, with pagination. Returns (jobs, nextToken).

func (*InMemoryBackend) ListBackupPlanVersions

func (b *InMemoryBackend) ListBackupPlanVersions(planID string) ([]*Plan, error)

ListBackupPlanVersions returns all versions of a backup plan.

func (*InMemoryBackend) ListBackupPlans

func (b *InMemoryBackend) ListBackupPlans() []*Plan

ListBackupPlans returns all backup plans sorted by name.

func (*InMemoryBackend) ListBackupPlansPaged

func (b *InMemoryBackend) ListBackupPlansPaged(f ListPlansFilter) ([]PlanListEntry, string)

ListBackupPlansPaged returns backup plans with pagination. Deleted plans are listed only when f.IncludeDeleted is set, each carrying its DeletionDate.

func (*InMemoryBackend) ListBackupSelections

func (b *InMemoryBackend) ListBackupSelections(
	planID string,
	maxResults int,
	nextToken string,
) ([]*Selection, string, error)

ListBackupSelections returns backup selections for a plan, paginated by MaxResults/NextToken (real query params, ListBackupSelections serializers.go:5539-5545 -- lowercase "maxResults"/"nextToken" on the wire; BackupPlanId is a required URI label, not a query param).

func (*InMemoryBackend) ListBackupVaults

func (b *InMemoryBackend) ListBackupVaults() []*Vault

ListBackupVaults returns all backup vaults sorted by name.

func (*InMemoryBackend) ListBackupVaultsFiltered

func (b *InMemoryBackend) ListBackupVaultsFiltered(f ListVaultsFilter) ([]*Vault, string)

ListBackupVaultsFiltered returns vaults with optional type filter and pagination.

func (*InMemoryBackend) ListCopyJobSummaries

func (b *InMemoryBackend) ListCopyJobSummaries(f JobSummaryFilter) []map[string]any

ListCopyJobSummaries counts copy jobs per aggregation window, resource type, state and message category.

func (*InMemoryBackend) ListCopyJobs

func (b *InMemoryBackend) ListCopyJobs() []*CopyJob

ListCopyJobs returns all copy jobs.

func (*InMemoryBackend) ListCopyJobsFiltered

func (b *InMemoryBackend) ListCopyJobsFiltered(f ListCopyJobsFilter) ([]*CopyJob, string)

ListCopyJobsFiltered returns copy jobs matching the filter, with pagination.

func (*InMemoryBackend) ListFrameworks

func (b *InMemoryBackend) ListFrameworks(maxResults int, nextToken string) ([]*Framework, string)

ListFrameworks returns all frameworks. ListFrameworks returns frameworks, paginated by MaxResults/NextToken (real query params, ListFrameworks serializers.go:5895-5901 -- capitalized "MaxResults"/"NextToken" on the wire, unlike ListProtectedResources' lowercase pair).

func (*InMemoryBackend) ListIndexedRecoveryPoints

func (b *InMemoryBackend) ListIndexedRecoveryPoints() []*RecoveryPoint

ListIndexedRecoveryPoints returns recovery points with an active index.

func (*InMemoryBackend) ListLegalHolds

func (b *InMemoryBackend) ListLegalHolds(maxResults int, nextToken string) ([]*LegalHold, string)

ListLegalHolds returns legal holds, paginated by MaxResults/NextToken (real query params, ListLegalHolds serializers.go:6055-6061 -- lowercase "maxResults"/"nextToken" on the wire).

func (*InMemoryBackend) ListProtectedResources

func (b *InMemoryBackend) ListProtectedResources(maxResults int, nextToken string) ([]*ProtectedResource, string)

ListProtectedResources returns protected resources, paginated by MaxResults/NextToken (real query params, backup@v1.59.4 serializers.go).

func (*InMemoryBackend) ListProtectedResourcesByBackupVault

func (b *InMemoryBackend) ListProtectedResourcesByBackupVault(
	vaultName string,
	maxResults int,
	nextToken string,
) ([]*ProtectedResource, string)

ListProtectedResourcesByBackupVault returns protected resources for a vault, paginated by MaxResults/NextToken (same wire shape as ListProtectedResources).

func (*InMemoryBackend) ListRecoveryPointsByBackupVault

func (b *InMemoryBackend) ListRecoveryPointsByBackupVault(
	vaultName string,
) ([]*RecoveryPoint, error)

ListRecoveryPointsByBackupVault returns all recovery points for a vault.

func (*InMemoryBackend) ListRecoveryPointsByLegalHold

func (b *InMemoryBackend) ListRecoveryPointsByLegalHold(legalHoldID string) []*RecoveryPoint

ListRecoveryPointsByLegalHold returns the recovery points covered by a legal hold's RecoveryPointSelection (by vault name, resource ARN, and/or creation-date range -- see recoveryPointMatchesSelection). A legal hold with no selection (or an all-empty one) covers every recovery point, matching AWS's "no additional constraint" semantics. An unknown legalHoldID is not an error (ListRecoveryPointsByLegalHold's real error list has no ResourceNotFoundException) -- it simply matches nothing.

func (*InMemoryBackend) ListRecoveryPointsByResource

func (b *InMemoryBackend) ListRecoveryPointsByResource(resourceArn string) []*RecoveryPoint

ListRecoveryPointsByResource returns recovery points for a given resource ARN across all vaults.

func (*InMemoryBackend) ListRecoveryPointsFiltered

func (b *InMemoryBackend) ListRecoveryPointsFiltered(
	vaultName string,
	f ListRPFilter,
) ([]*RecoveryPoint, string, error)

ListRecoveryPointsFiltered returns recovery points for a vault with optional filters and pagination.

func (*InMemoryBackend) ListReportJobs

func (b *InMemoryBackend) ListReportJobs(reportPlanName string) []*ReportJob

ListReportJobs returns all report jobs, optionally filtered by report plan name.

func (*InMemoryBackend) ListReportJobsFiltered

func (b *InMemoryBackend) ListReportJobsFiltered(f ReportJobsFilter) []*ReportJob

ListReportJobsFiltered returns the report jobs matching f.

func (*InMemoryBackend) ListReportPlans

func (b *InMemoryBackend) ListReportPlans(maxResults int, nextToken string) ([]*ReportPlan, string)

ListReportPlans returns report plans, paginated by MaxResults/NextToken (real query params, ListReportPlans serializers.go:6633-6639 -- capitalized "MaxResults"/"NextToken" on the wire).

func (*InMemoryBackend) ListRestoreAccessBackupVaults

func (b *InMemoryBackend) ListRestoreAccessBackupVaults(vaultName string) ([]*RestoreAccessVault, error)

ListRestoreAccessBackupVaults returns the restore access vaults created from the given source vault name. Real AWS addresses this op as GET /logically-air-gapped-backup-vaults/{BackupVaultName}/restore-access-backup-vaults, i.e. always scoped to one source vault -- there is no "list all" op.

func (*InMemoryBackend) ListRestoreJobSummaries

func (b *InMemoryBackend) ListRestoreJobSummaries(f JobSummaryFilter) []map[string]any

ListRestoreJobSummaries counts restore jobs per aggregation window, resource type and state.

func (*InMemoryBackend) ListRestoreJobs

func (b *InMemoryBackend) ListRestoreJobs() []*RestoreJob

ListRestoreJobs returns all restore jobs.

func (*InMemoryBackend) ListRestoreJobsByProtectedResource

func (b *InMemoryBackend) ListRestoreJobsByProtectedResource(resourceArn string) []*RestoreJob

ListRestoreJobsByProtectedResource returns restore jobs for a given resource ARN.

func (*InMemoryBackend) ListRestoreJobsByProtectedResourceFiltered

func (b *InMemoryBackend) ListRestoreJobsByProtectedResourceFiltered(
	resourceArn string, f ProtectedResourceRestoreFilter,
) []*RestoreJob

ListRestoreJobsByProtectedResourceFiltered applies f to the jobs for resourceArn; a job whose recovery point is gone fails any creation-date bound.

func (*InMemoryBackend) ListRestoreJobsFiltered

func (b *InMemoryBackend) ListRestoreJobsFiltered(f ListRestoreJobsFilter) ([]*RestoreJob, string)

ListRestoreJobsFiltered returns restore jobs matching the filter, paginated per f.MaxResults/f.NextToken. Returns (jobs, nextToken).

func (*InMemoryBackend) ListRestoreTestingPlans

func (b *InMemoryBackend) ListRestoreTestingPlans(maxResults int, nextToken string) ([]*RestoreTestingPlan, string)

ListRestoreTestingPlans returns restore testing plans, paginated by MaxResults/NextToken (real query params, ListRestoreTestingPlans serializers.go:7065-7071 -- capitalized "MaxResults"/"NextToken" on the wire).

func (*InMemoryBackend) ListRestoreTestingSelections

func (b *InMemoryBackend) ListRestoreTestingSelections(
	planName string,
	maxResults int,
	nextToken string,
) ([]*RestoreTestingSelection, string, error)

ListRestoreTestingSelections returns all selections for a restore testing plan. ListRestoreTestingSelections returns selections for a restore testing plan, paginated by MaxResults/NextToken (real query params, ListRestoreTestingSelections serializers.go:7135-7141 -- capitalized "MaxResults"/"NextToken" on the wire; RestoreTestingPlanName is a required URI label, not a query param).

func (*InMemoryBackend) ListScanJobSummaries

func (b *InMemoryBackend) ListScanJobSummaries(f JobSummaryFilter) []map[string]any

ListScanJobSummaries counts scan jobs per aggregation window, resource type, state, scanner and result status. ScanResultStatus derives from the job state: this emulator has no malware engine to report threats.

func (*InMemoryBackend) ListScanJobs

func (b *InMemoryBackend) ListScanJobs() []*ScanJob

ListScanJobs returns all scan jobs.

func (*InMemoryBackend) ListScanJobsFiltered

func (b *InMemoryBackend) ListScanJobsFiltered(f ListScanJobsFilter) ([]*ScanJob, string)

ListScanJobsFiltered returns scan jobs matching the filter.

func (*InMemoryBackend) ListTags

func (b *InMemoryBackend) ListTags(resourceArn string) (map[string]string, error)

ListTags returns tags for a resource by ARN. Supported resource types: backup vaults, backup plans, frameworks, report plans.

func (*InMemoryBackend) ListTieringConfigurations

func (b *InMemoryBackend) ListTieringConfigurations() []*TieringConfiguration

ListTieringConfigurations returns all tiering configurations sorted by name.

func (*InMemoryBackend) PutBackupVaultAccessPolicy

func (b *InMemoryBackend) PutBackupVaultAccessPolicy(vaultName, policy string) error

PutBackupVaultAccessPolicy sets an access policy for a vault. The policy must be valid JSON representing an IAM policy document.

func (*InMemoryBackend) PutBackupVaultLockConfiguration

func (b *InMemoryBackend) PutBackupVaultLockConfiguration(
	vaultName string,
	cfg *VaultLockConfig,
) error

PutBackupVaultLockConfiguration sets the lock configuration for a vault. If a LockDate already exists and has passed, the configuration is immutable.

func (*InMemoryBackend) PutBackupVaultNotifications

func (b *InMemoryBackend) PutBackupVaultNotifications(
	vaultName string,
	cfg *VaultNotificationConfig,
) error

PutBackupVaultNotifications sets notification configuration for a vault. Events are validated against the canonical AWS Backup event enum.

func (*InMemoryBackend) PutProtectedResource

func (b *InMemoryBackend) PutProtectedResource(resourceArn, resourceType, vaultName string)

PutProtectedResource adds or updates a protected resource record. Used only by tests to seed state directly -- production traffic populates this via CompleteBackupJob's inline update.

func (*InMemoryBackend) PutRestoreValidationResult

func (b *InMemoryBackend) PutRestoreValidationResult(
	restoreJobID, validationStatus, validationStatusMessage string,
) error

PutRestoreValidationResult records the validation outcome of a restore test on the restore job itself, so DescribeRestoreJob reflects it -- this was previously a disguised no-op: the result went into a side map (restoreValidations) that DescribeRestoreJob never read.

func (*InMemoryBackend) Region

func (b *InMemoryBackend) Region() string

Region returns the AWS region this backend is configured for.

func (*InMemoryBackend) Reset

func (b *InMemoryBackend) Reset()

Reset clears all state, returning the backend to a clean initial state. Tags resources are properly closed before discarding.

func (*InMemoryBackend) Restore

func (b *InMemoryBackend) Restore(ctx context.Context, data []byte) error

Restore loads backend state from a JSON snapshot. It implements persistence.Persistable.

func (*InMemoryBackend) RevokeRestoreAccessBackupVault

func (b *InMemoryBackend) RevokeRestoreAccessBackupVault(vaultName, restoreAccessVaultArn string) error

RevokeRestoreAccessBackupVault removes a restore access vault, scoped to the given source vault name (real AWS: DELETE /logically-air-gapped-backup-vaults/{BackupVaultName}/restore-access-backup-vaults/{RestoreAccessBackupVaultArn} -- a restore access vault not sourced from vaultName is reported not-found, matching AWS's per-source-vault addressing).

func (*InMemoryBackend) RunBackupJob

func (b *InMemoryBackend) RunBackupJob(jobID string) error

RunBackupJob moves a CREATED job to RUNNING.

func (*InMemoryBackend) SetDynamoDBBackend

func (b *InMemoryBackend) SetDynamoDBBackend(ddb DynamoDBBackend)

SetDynamoDBBackend wires DynamoDB so tables are snapshotted at backup time and recreated on restore.

func (*InMemoryBackend) SetLifecycleDelay

func (b *InMemoryBackend) SetLifecycleDelay(d time.Duration)

SetLifecycleDelay sets how long restore and copy jobs stay in their transitional states before they settle; zero (the default) settles them synchronously. Jobs settle lazily on the next read.

func (*InMemoryBackend) SetObjectStore

func (b *InMemoryBackend) SetObjectStore(store ObjectStore)

SetObjectStore wires S3 for report delivery and S3 backup and restore; it also serves the bucket checks.

func (*InMemoryBackend) SetS3Backend

func (b *InMemoryBackend) SetS3Backend(s3 S3Backend)

SetS3Backend wires S3 so StartBackupJob validates an S3-typed ResourceArn names a bucket that actually exists, instead of accepting any non-empty ResourceArn regardless of whether it resolves to a real resource (gopherstack-0o0q).

func (*InMemoryBackend) SetVolumeService

func (b *InMemoryBackend) SetVolumeService(vols VolumeService, region, accountID string)

SetVolumeService wires EC2 so EBS volumes are recreated on restore.

func (*InMemoryBackend) Snapshot

func (b *InMemoryBackend) Snapshot(ctx context.Context) []byte

Snapshot serialises the backend state to JSON. It implements persistence.Persistable.

func (*InMemoryBackend) StartBackupJob

func (b *InMemoryBackend) StartBackupJob(
	vaultName, resourceArn, iamRoleArn, resourceType string,
	backupOptions map[string]string, startWindowMinutes int64,
) (*Job, error)

StartBackupJob starts a new backup job.

func (*InMemoryBackend) StartBackupJobFromInput

func (b *InMemoryBackend) StartBackupJobFromInput(in StartBackupJobInput) (*Job, error)

StartBackupJobFromInput starts a backup job; a retry with the same IdempotencyToken returns the job it already started.

func (*InMemoryBackend) StartCopyJob

func (b *InMemoryBackend) StartCopyJob(
	recoveryPointArn, sourceVaultName, destVaultArn, iamRoleArn string,
) (*CopyJob, error)

StartCopyJob creates a copy job that copies a recovery point from a source vault to a destination vault, and materializes the resulting recovery point in the destination vault (previously a disguised no-op: the job record was created but nothing was ever actually copied, so DescribeRecoveryPoint against the destination vault could never see it).

sourceVaultName is a NAME (StartCopyJobInput.SourceBackupVaultName on the real wire); destVaultArn is an ARN (StartCopyJobInput.DestinationBackupVaultArn) -- this asymmetry matches AWS exactly, it is not a typo.

func (*InMemoryBackend) StartCopyJobWithLifecycle

func (b *InMemoryBackend) StartCopyJobWithLifecycle(
	recoveryPointArn, sourceVaultName, destVaultArn, iamRoleArn string,
	lifecycle *Lifecycle,
) (*CopyJob, error)

StartCopyJobWithLifecycle is StartCopyJob with the request's Lifecycle. A lifecycle that breaks the destination vault's lock retention bounds FAILS the copy job and creates no recovery point.

func (*InMemoryBackend) StartReportJob

func (b *InMemoryBackend) StartReportJob(reportPlanName string) *ReportJob

StartReportJob compiles a report for the plan and delivers it to the plan's S3 channel. Delivery needs a wired object store; without one the job still completes but names no destination.

func (*InMemoryBackend) StartRestoreJob

func (b *InMemoryBackend) StartRestoreJob(
	recoveryPointArn, iamRoleArn, resourceType string,
	metadata map[string]string,
) (*RestoreJob, error)

StartRestoreJob creates a new restore job. Real AWS provisions an actual new resource of ResourceType once the restore completes; this emulator synthesizes a plausible CreatedResourceArn instead so callers exercising "restore -> use the restored resource" flows have something ARN-shaped to chain off of.

func (*InMemoryBackend) StartRestoreJobWithToken

func (b *InMemoryBackend) StartRestoreJobWithToken(
	recoveryPointArn, iamRoleArn, resourceType string,
	metadata map[string]string,
	token string,
) (*RestoreJob, error)

StartRestoreJobWithToken is StartRestoreJob with an IdempotencyToken; a retry with the same token returns the job it already started.

func (*InMemoryBackend) StartScanJob

func (b *InMemoryBackend) StartScanJob(backupVaultArn string, input StartScanJobInput) *ScanJob

StartScanJob creates a new scan job for a backup vault. ResourceArn/ResourceType are derived from the recovery point input.RecoveryPointArn identifies, when this backend is tracking one -- left absent (not fabricated) when it isn't.

func (*InMemoryBackend) StopBackupJob

func (b *InMemoryBackend) StopBackupJob(jobID string) error

StopBackupJob cancels a running backup job.

func (*InMemoryBackend) TagResource

func (b *InMemoryBackend) TagResource(resourceArn string, kv map[string]string) error

TagResource adds tags to a resource by ARN. Supported resource types: backup vaults, backup plans, frameworks, report plans, restore access backup vaults.

func (*InMemoryBackend) TaggedResources added in v1.2.0

func (b *InMemoryBackend) TaggedResources() []TaggedEntry

TaggedResources returns every Backup resource ARN that currently has at least one tag, across every taggable Backup resource kind (backup vaults, backup plans, frameworks, report plans).

func (*InMemoryBackend) UntagResource

func (b *InMemoryBackend) UntagResource(resourceArn string, tagKeys []string) error

UntagResource removes the given tag keys from a resource identified by ARN. Supported resource types: backup vaults, backup plans, frameworks, report plans.

func (*InMemoryBackend) UpdateBackupPlan

func (b *InMemoryBackend) UpdateBackupPlan(
	idOrName string,
	rules []Rule,
	advancedSettings []AdvancedBackupSetting,
) (*Plan, error)

UpdateBackupPlan updates an existing backup plan.

func (*InMemoryBackend) UpdateBackupPlanValidated

func (b *InMemoryBackend) UpdateBackupPlanValidated(
	idOrName string,
	rules []Rule,
	advancedSettings []AdvancedBackupSetting,
) (*Plan, error)

UpdateBackupPlanValidated updates a backup plan after validating rules.

func (*InMemoryBackend) UpdateFramework

func (b *InMemoryBackend) UpdateFramework(
	name, description string,
	controls *[]FrameworkControl,
) (*Framework, error)

UpdateFramework updates a framework's description and, when controls is non-nil, replaces its FrameworkControls (a nil controls means "leave existing controls unchanged", matching AWS's optional UpdateFrameworkInput .FrameworkControls -- an explicit empty slice clears them).

func (*InMemoryBackend) UpdateGlobalSettings

func (b *InMemoryBackend) UpdateGlobalSettings(settings map[string]string)

UpdateGlobalSettings updates the account-level global backup settings.

func (*InMemoryBackend) UpdateRecoveryPointIndexSettings

func (b *InMemoryBackend) UpdateRecoveryPointIndexSettings(
	vaultName, recoveryPointArn, indexStatus string,
) error

UpdateRecoveryPointIndexSettings updates indexing settings for a recovery point.

func (*InMemoryBackend) UpdateRecoveryPointLifecycle

func (b *InMemoryBackend) UpdateRecoveryPointLifecycle(
	vaultName, recoveryPointArn string,
	moveToColdStorageAfterDays, deleteAfterDays int64,
) error

UpdateRecoveryPointLifecycle updates the lifecycle of a recovery point, recomputing its CalculatedLifecycle transition timestamps from CreationDate.

func (*InMemoryBackend) UpdateRegionSettings

func (b *InMemoryBackend) UpdateRegionSettings(
	mgmtPref map[string]bool,
	optInPref map[string]bool,
)

UpdateRegionSettings updates the regional backup preferences.

func (*InMemoryBackend) UpdateReportPlan

func (b *InMemoryBackend) UpdateReportPlan(
	name, description string,
	deliveryChannel *ReportDeliveryChannel,
	setting *ReportSetting,
) (*ReportPlan, error)

UpdateReportPlan updates a report plan's description and, when non-nil, its ReportDeliveryChannel/ReportSetting (both optional on the real UpdateReportPlanInput -- an omitted field leaves the existing value unchanged, matching UpdateFramework's FrameworkControls semantics).

func (*InMemoryBackend) UpdateRestoreTestingPlan

func (b *InMemoryBackend) UpdateRestoreTestingPlan(
	planName, scheduleExpression string,
	startWindowHours int64,
	recoveryPointSelection *RestoreTestingRecoveryPointSelection,
) (*RestoreTestingPlan, error)

UpdateRestoreTestingPlan updates a restore testing plan. RecoveryPointSelection is optional on the real RestoreTestingPlanForUpdate (types.go:2431-2456, no "required" marker), so an omitted (nil) value leaves the plan's existing selection unchanged rather than clearing it.

func (*InMemoryBackend) UpdateRestoreTestingSelection

func (b *InMemoryBackend) UpdateRestoreTestingSelection(
	planName, selectionName string,
	in RestoreTestingSelectionInput,
) (*RestoreTestingSelection, error)

UpdateRestoreTestingSelection updates a restore testing selection. RestoreTestingSelectionForUpdate has no required fields beyond identity, so every field here is set from in verbatim (a full-replace PUT, matching how PutBackupVaultAccessPolicy/PutBackupVaultLockConfiguration etc. treat their bodies elsewhere in this service) -- ProtectedResourceType itself is immutable on Update per the real API, so it is intentionally not touched here.

func (*InMemoryBackend) UpdateTieringConfiguration

func (b *InMemoryBackend) UpdateTieringConfiguration(
	name, vaultName string,
	sel []ResourceSelection,
) (*TieringConfiguration, error)

UpdateTieringConfiguration replaces the BackupVaultName/ResourceSelection body of an existing tiering configuration. TieringConfigurationName cannot be changed (it is the resource's identity), matching AWS.

type Janitor

type Janitor struct {
	Backend     *InMemoryBackend
	Interval    time.Duration
	JobTTL      time.Duration
	TaskTimeout time.Duration
}

Janitor is the Backup background worker that evicts completed backup jobs after a configurable TTL to prevent unbounded growth of in-memory state.

func NewJanitor

func NewJanitor(backend *InMemoryBackend, interval, jobTTL time.Duration) *Janitor

NewJanitor creates a new Backup Janitor for the given backend. Zero values for interval or jobTTL fall back to defaults.

func (*Janitor) Run

func (j *Janitor) Run(ctx context.Context)

Run runs the janitor loop until ctx is cancelled.

func (*Janitor) SweepOnce

func (j *Janitor) SweepOnce(ctx context.Context)

SweepOnce runs a single sweep pass. Exposed for testing.

type Job

type Job struct {
	CreationTime              time.Time         `json:"creationTime"`
	CompletionTime            *time.Time        `json:"completionTime,omitempty"`
	ExpectedCompletionDate    *time.Time        `json:"expectedCompletionDate,omitempty"`
	StartBy                   *time.Time        `json:"startBy,omitempty"`
	BackupOptions             map[string]string `json:"backupOptions,omitempty"`
	RecoveryPointTags         map[string]string `json:"recoveryPointTags,omitempty"`
	Lifecycle                 *Lifecycle        `json:"lifecycle,omitempty"`
	IdempotencyToken          string            `json:"idempotencyToken,omitempty"`
	ResourceArn               string            `json:"resourceArn,omitempty"`
	BackupJobID               string            `json:"backupJobId"`
	BackupVaultName           string            `json:"backupVaultName"`
	BackupVaultArn            string            `json:"backupVaultArn"`
	ResourceType              string            `json:"resourceType,omitempty"`
	IAMRoleArn                string            `json:"iamRoleArn,omitempty"`
	State                     string            `json:"state"`
	AccountID                 string            `json:"accountId"`
	Region                    string            `json:"region"`
	RecoveryPointArn          string            `json:"recoveryPointArn,omitempty"`
	PercentDone               string            `json:"percentDone,omitempty"`
	MessageCategory           string            `json:"messageCategory,omitempty"`
	StatusMessage             string            `json:"statusMessage,omitempty"`
	ParentJobID               string            `json:"parentJobId,omitempty"`
	CompositeMemberIdentifier string            `json:"compositeMemberIdentifier,omitempty"`
	BytesTransferred          int64             `json:"bytesTransferred,omitempty"`
	BackupSizeInBytes         int64             `json:"backupSizeInBytes,omitempty"`
	IsParent                  bool              `json:"isParent,omitempty"`
}

Job represents an AWS Backup job.

type JobSummaryFilter

type JobSummaryFilter struct {
	AccountID         string
	MessageCategory   string
	ResourceType      string
	State             string
	MalwareScanner    string
	ScanResultStatus  string
	AggregationPeriod string
}

JobSummaryFilter holds the List*JobSummaries query filters. Empty and "ANY" return one row per distinct value; "AGGREGATE_ALL" sums that dimension into a single row (api_op_List*JobSummaries.go).

func NewJobSummaryFilter

func NewJobSummaryFilter(q url.Values) JobSummaryFilter

NewJobSummaryFilter reads the filter members from a List*JobSummaries query string.

func (JobSummaryFilter) Validate

func (f JobSummaryFilter) Validate() error

Validate rejects an AggregationPeriod outside the SDK enum.

type KeyValue added in v1.2.0

type KeyValue struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

KeyValue is a single tag key/value pair used by ProtectedResourceConditions.

type LegalHold

type LegalHold struct {
	CreationDate           time.Time               `json:"creationDate"`
	CancellationDate       *time.Time              `json:"cancellationDate,omitempty"`
	RetainRecordUntil      *time.Time              `json:"retainRecordUntil,omitempty"`
	RecoveryPointSelection *RecoveryPointSelection `json:"recoveryPointSelection,omitempty"`
	Title                  string                  `json:"title"`
	Description            string                  `json:"description"`
	LegalHoldID            string                  `json:"legalHoldId"`
	LegalHoldArn           string                  `json:"legalHoldArn"`
	Status                 string                  `json:"status"`
	CancelDescription      string                  `json:"cancelDescription,omitempty"`
	IdempotencyToken       string                  `json:"idempotencyToken,omitempty"`
}

LegalHold represents an AWS Backup legal hold.

type Lifecycle

type Lifecycle struct {
	MoveToColdStorageAfterDays          int64 `json:"moveToColdStorageAfterDays,omitempty"`
	DeleteAfterDays                     int64 `json:"deleteAfterDays,omitempty"`
	OptInToArchiveForSupportedResources bool  `json:"optInToArchiveForSupportedResources,omitempty"`
}

Lifecycle holds backup retention lifecycle settings for a rule or recovery point.

type ListBackupJobsFilter

type ListBackupJobsFilter struct {
	CreatedAfter  *time.Time
	CreatedBefore *time.Time
	VaultName     string
	State         string
	ResourceArn   string
	ResourceType  string
	AccountID     string
	ParentJobID   string
	NextToken     string
	MaxResults    int
}

ListBackupJobsFilter contains optional filter parameters for listing backup jobs.

type ListCopyJobsFilter

type ListCopyJobsFilter struct {
	CreatedAfter              *time.Time
	CreatedBefore             *time.Time
	State                     string
	ResourceArn               string
	ResourceType              string
	SourceRecoveryPointArn    string
	DestinationBackupVaultArn string
	AccountID                 string
	NextToken                 string
	MaxResults                int
}

ListCopyJobsFilter contains optional filter parameters for listing copy jobs.

type ListPlansFilter

type ListPlansFilter struct {
	NextToken      string
	MaxResults     int
	IncludeDeleted bool
}

ListPlansFilter contains pagination parameters for listing backup plans.

type ListRPFilter

type ListRPFilter struct {
	CreatedAfter           *time.Time
	CreatedBefore          *time.Time
	ResourceArn            string
	ResourceType           string
	ParentRecoveryPointArn string
	NextToken              string
	MaxResults             int
}

ListRPFilter contains optional filter parameters for listing recovery points.

type ListRestoreJobsFilter

type ListRestoreJobsFilter struct {
	CreatedAfter   *time.Time
	CreatedBefore  *time.Time
	CompleteAfter  *time.Time
	CompleteBefore *time.Time
	AccountID      string
	ResourceType   string
	Status         string
	NextToken      string
	MaxResults     int
}

ListRestoreJobsFilter contains optional filter parameters for listing restore jobs, mirroring ListRestoreJobsInput (api_op_ListRestoreJobs.go, backup@v1.59.4). ByParentJobId and ByRestoreTestingPlanArn are not included: this backend's RestoreJob has no field to hold either value (StartRestoreJob never receives or fabricates one).

func RestoreJobsFilterFromQuery

func RestoreJobsFilterFromQuery(q url.Values) ListRestoreJobsFilter

RestoreJobsFilterFromQuery builds a ListRestoreJobsFilter from ListRestoreJobs query parameters (api_op_ListRestoreJobs.go, serializers.go, backup@v1.59.4): accountId, resourceType, status, createdAfter, createdBefore, completeAfter, completeBefore, maxResults, nextToken.

type ListScanJobsFilter

type ListScanJobsFilter struct {
	CompleteAfter    *time.Time
	CompleteBefore   *time.Time
	AccountID        string
	BackupVaultName  string
	MalwareScanner   string
	RecoveryPointArn string
	ResourceArn      string
	ResourceType     string
	State            string
	ScanResultStatus string
	NextToken        string
	MaxResults       int
}

ListScanJobsFilter contains optional filter parameters for listing scan jobs, mirroring ListScanJobsInput (api_op_ListScanJobs.go, backup@v1.59.4).

func ScanJobsFilterFromQuery

func ScanJobsFilterFromQuery(q url.Values) ListScanJobsFilter

ScanJobsFilterFromQuery builds a ListScanJobsFilter from ListScanJobs query parameters. ListScanJobs is the one op in this service that does NOT strip the "By" prefix on the wire (serializers.go ListScanJobs query bindings, backup@v1.59.4): ByAccountId, ByBackupVaultName, ByMalwareScanner, ByRecoveryPointArn, ByResourceArn, ByResourceType, ByState, ByCompleteAfter, ByCompleteBefore all keep the full PascalCase Go field name.

type ListVaultsFilter

type ListVaultsFilter struct {
	VaultType  string
	NextToken  string
	MaxResults int
}

ListVaultsFilter contains optional filter parameters for listing backup vaults.

type ObjectStore

ObjectStore is the S3 surface used to deliver reports and snapshot and restore buckets.

type Plan

type Plan struct {
	CreationTime           time.Time               `json:"creationTime"`
	UpdateTime             *time.Time              `json:"updateTime,omitempty"`
	Tags                   *tags.Tags              `json:"tags,omitempty"`
	BackupPlanName         string                  `json:"backupPlanName"`
	BackupPlanArn          string                  `json:"backupPlanArn"`
	BackupPlanID           string                  `json:"backupPlanId"`
	VersionID              string                  `json:"versionId"`
	AccountID              string                  `json:"accountId"`
	Region                 string                  `json:"region"`
	Rules                  []Rule                  `json:"rules"`
	AdvancedBackupSettings []AdvancedBackupSetting `json:"advancedBackupSettings,omitempty"`
}

Plan represents an AWS Backup plan.

The Tags field is backend-owned. Callers must treat the returned pointer as read-only; mutate tags only via TagResource / CreateBackupPlan.

type PlanListEntry

type PlanListEntry struct {
	DeletionTime *time.Time
	Plan         Plan
}

PlanListEntry is one ListBackupPlans row; DeletionTime is set for deleted plans.

type ProtectedResource

type ProtectedResource struct {
	LastBackupTime       time.Time `json:"lastBackupTime"`
	ResourceArn          string    `json:"resourceArn"`
	ResourceName         string    `json:"resourceName,omitempty"`
	ResourceType         string    `json:"resourceType"`
	BackupVaultName      string    `json:"backupVaultName,omitempty"`
	LastBackupVaultArn   string    `json:"lastBackupVaultArn,omitempty"`
	LastRecoveryPointArn string    `json:"lastRecoveryPointArn,omitempty"`
}

ProtectedResource represents a resource protected by AWS Backup.

type ProtectedResourceConditions added in v1.2.0

type ProtectedResourceConditions struct {
	StringEquals    []KeyValue `json:"stringEquals,omitempty"`
	StringNotEquals []KeyValue `json:"stringNotEquals,omitempty"`
}

ProtectedResourceConditions filters a restore testing selection's wildcard ProtectedResourceArns (["*"]) down to resources matching (or not matching) specific tag key/value pairs.

type ProtectedResourceRestoreFilter

type ProtectedResourceRestoreFilter struct {
	RecoveryPointCreatedAfter  *time.Time
	RecoveryPointCreatedBefore *time.Time
	Status                     string
}

ProtectedResourceRestoreFilter holds ListRestoreJobsByProtectedResource's ByStatus and ByRecoveryPointCreationDate* filters.

type Provider

type Provider struct{}

Provider implements service.Provider for AWS Backup.

func (*Provider) Init

Init initializes the Backup service backend and handler.

func (*Provider) Name

func (p *Provider) Name() string

Name returns the provider name.

type RecoveryPoint

type RecoveryPoint struct {
	CreationDate              time.Time            `json:"creationDate"`
	Tags                      map[string]string    `json:"tags,omitempty"`
	CompletionDate            *time.Time           `json:"completionDate,omitempty"`
	Lifecycle                 *Lifecycle           `json:"lifecycle,omitempty"`
	CalculatedLifecycle       *CalculatedLifecycle `json:"calculatedLifecycle,omitempty"`
	EncryptionKeyArn          string               `json:"encryptionKeyArn,omitempty"`
	IAMRoleArn                string               `json:"iamRoleArn,omitempty"`
	BackupVaultName           string               `json:"backupVaultName"`
	BackupVaultArn            string               `json:"backupVaultArn"`
	ResourceArn               string               `json:"resourceArn,omitempty"`
	ResourceType              string               `json:"resourceType,omitempty"`
	ResourceName              string               `json:"resourceName,omitempty"`
	RecoveryPointArn          string               `json:"recoveryPointArn"`
	Status                    string               `json:"status"`
	StorageClass              string               `json:"storageClass,omitempty"`
	SourceBackupVaultArn      string               `json:"sourceBackupVaultArn,omitempty"`
	ParentRecoveryPointArn    string               `json:"parentRecoveryPointArn,omitempty"`
	CompositeMemberIdentifier string               `json:"compositeMemberIdentifier,omitempty"`
	Snapshot                  json.RawMessage      `json:"snapshot,omitempty"`
	BackupSizeInBytes         int64                `json:"backupSizeInBytes,omitempty"`
	IsEncrypted               bool                 `json:"isEncrypted,omitempty"`
}

RecoveryPoint represents an AWS Backup recovery point.

type RecoveryPointSelection added in v1.2.0

type RecoveryPointSelection struct {
	DateRange           *DateRange `json:"dateRange,omitempty"`
	ResourceIdentifiers []string   `json:"resourceIdentifiers,omitempty"`
	VaultNames          []string   `json:"vaultNames,omitempty"`
}

RecoveryPointSelection specifies which recovery points a legal hold applies to: by containing vault, by resource ARN, and/or by creation-date window. A CreateLegalHold call with no selection (or an empty one) covers every recovery point -- there is no additional constraint to apply.

type RegionSettings

type RegionSettings struct {
	ResourceTypeManagementPreference map[string]bool `json:"resourceTypeManagementPreference"`
	ResourceTypeOptInPreference      map[string]bool `json:"resourceTypeOptInPreference"`
}

RegionSettings holds per-region backup preferences.

type ReportDeliveryChannel

type ReportDeliveryChannel struct {
	S3BucketName string   `json:"s3BucketName"`
	S3KeyPrefix  string   `json:"s3KeyPrefix,omitempty"`
	Formats      []string `json:"formats,omitempty"`
}

ReportDeliveryChannel specifies the S3 destination and format for report output.

type ReportDestination

type ReportDestination struct {
	S3BucketName string   `json:"s3BucketName"`
	S3Keys       []string `json:"s3Keys,omitempty"`
}

ReportDestination is where a completed report job delivered its files.

type ReportJob

type ReportJob struct {
	CreationTime      time.Time          `json:"creationTime"`
	CompletionTime    *time.Time         `json:"completionTime,omitempty"`
	ReportDestination *ReportDestination `json:"reportDestination,omitempty"`
	ReportJobID       string             `json:"reportJobId"`
	ReportPlanArn     string             `json:"reportPlanArn"`
	ReportTemplate    string             `json:"reportTemplate,omitempty"`
	Status            string             `json:"status"`
	StatusMessage     string             `json:"statusMessage,omitempty"`
}

ReportJob represents an AWS Backup report job.

type ReportJobsFilter

type ReportJobsFilter struct {
	CreatedAfter   *time.Time
	CreatedBefore  *time.Time
	ReportPlanName string
	Status         string
}

ReportJobsFilter holds ListReportJobs' ByReportPlanName/ByStatus/ByCreation* filters.

type ReportPlan

type ReportPlan struct {
	Tags                  *tags.Tags             `json:"tags,omitempty"`
	IdempotencyToken      string                 `json:"idempotencyToken,omitempty"`
	ReportDeliveryChannel *ReportDeliveryChannel `json:"reportDeliveryChannel,omitempty"`
	ReportSetting         *ReportSetting         `json:"reportSetting,omitempty"`
	CreationTime          time.Time              `json:"creationTime"`
	ReportPlanName        string                 `json:"reportPlanName"`
	ReportPlanArn         string                 `json:"reportPlanArn"`
	ReportPlanDescription string                 `json:"reportPlanDescription,omitempty"`
	// DeploymentStatus is always "COMPLETED": this backend has no async
	// create/update/delete pipeline for report plans, so the transient
	// *_IN_PROGRESS states real AWS reports never apply here.
	// terraform-provider-aws polls this field and errors if it's ever
	// omitted/empty.
	DeploymentStatus string `json:"deploymentStatus"`
}

ReportPlan represents an AWS Backup report plan.

type ReportSetting

type ReportSetting struct {
	ReportTemplate     string   `json:"reportTemplate"`
	FrameworkArns      []string `json:"frameworkArns,omitempty"`
	Accounts           []string `json:"accounts,omitempty"`
	OrganizationUnits  []string `json:"organizationUnits,omitempty"`
	Regions            []string `json:"regions,omitempty"`
	NumberOfFrameworks int32    `json:"numberOfFrameworks,omitempty"`
}

ReportSetting specifies the template, frameworks, and account/OU/Region scope driving a report plan.

type ResourceSelection added in v1.2.0

type ResourceSelection struct {
	ResourceType              string   `json:"resourceType"`
	Resources                 []string `json:"resources"`
	TieringDownSettingsInDays int64    `json:"tieringDownSettingsInDays"`
}

ResourceSelection specifies which resources within a vault a tiering configuration applies to, and the age threshold (in days) after which matching objects transition to the low-cost warm storage tier.

type RestoreAccessVault

type RestoreAccessVault struct {
	CreationDate                 time.Time  `json:"creationDate"`
	Tags                         *tags.Tags `json:"tags,omitempty"`
	RestoreAccessBackupVaultName string     `json:"restoreAccessBackupVaultName"`
	RestoreAccessBackupVaultArn  string     `json:"restoreAccessBackupVaultArn"`
	SourceBackupVaultArn         string     `json:"sourceBackupVaultArn"`
	// SourceBackupVaultName is not on the AWS wire shape; it is resolved from
	// SourceBackupVaultArn at creation time so ListRestoreAccessBackupVaults /
	// RevokeRestoreAccessBackupVault -- which AWS addresses by source vault
	// NAME, not ARN (see their real nested paths under
	// /logically-air-gapped-backup-vaults/{BackupVaultName}/...) -- can filter
	// without re-parsing the ARN on every call.
	SourceBackupVaultName string `json:"sourceBackupVaultName"`
	// CreatorRequestID is not on the AWS wire shape (no Describe/List op for a
	// restore access vault ever returns it); it exists purely to make repeated
	// CreateRestoreAccessBackupVault calls with the same token idempotent,
	// mirroring CreateBackupVault's CreatorRequestID convention.
	CreatorRequestID string `json:"creatorRequestId,omitempty"`
	VaultState       string `json:"vaultState"`
}

RestoreAccessVault represents an AWS Backup restore access backup vault.

The Tags field is backend-owned. Callers must treat the returned pointer as read-only; mutate tags only via TagResource / CreateRestoreAccessBackupVault. It may be nil for a vault restored from a snapshot taken before this field existed (an additive change, not a version bump) -- callers must nil-check rather than assume it is always set.

type RestoreJob

type RestoreJob struct {
	CompletionDate   *time.Time        `json:"completionDate,omitempty"`
	SettleAt         *time.Time        `json:"settleAt,omitempty"`
	Metadata         map[string]string `json:"metadata,omitempty"`
	StartTime        time.Time         `json:"startTime"`
	RestoreJobID     string            `json:"restoreJobId"`
	RecoveryPointArn string            `json:"recoveryPointArn"`
	IAMRoleArn       string            `json:"iamRoleArn"`
	ResourceArn      string            `json:"resourceArn,omitempty"`
	ResourceType     string            `json:"resourceType,omitempty"`
	BackupVaultName  string            `json:"backupVaultName,omitempty"`
	BackupVaultArn   string            `json:"backupVaultArn,omitempty"`
	AccountID        string            `json:"accountId,omitempty"`
	IdempotencyToken string            `json:"idempotencyToken,omitempty"`
	// CreatedResourceArn is the ARN of the resource StartRestoreJob created
	// once the restore completes -- real AWS would provision an actual new
	// resource of ResourceType; this emulator synthesizes a plausible ARN
	// instead (see restore_jobs.go's StartRestoreJob).
	CreatedResourceArn      string `json:"createdResourceArn,omitempty"`
	Status                  string `json:"status"`
	StatusMessage           string `json:"statusMessage,omitempty"`
	PercentDone             string `json:"percentDone,omitempty"`
	ValidationStatus        string `json:"validationStatus,omitempty"`
	ValidationStatusMessage string `json:"validationStatusMessage,omitempty"`
	BackupSizeInBytes       int64  `json:"backupSizeInBytes,omitempty"`
}

RestoreJob represents an AWS Backup restore job.

type RestoreTestingPlan

type RestoreTestingPlan struct {
	CreationTime time.Time `json:"creationTime"`
	// UpdateTime is required on UpdateRestoreTestingPlanOutput
	// (api_op_UpdateRestoreTestingPlan.go) but nil until the plan's first
	// update -- real AWS only sets it once an update has occurred.
	UpdateTime             *time.Time                            `json:"updateTime,omitempty"`
	RecoveryPointSelection *RestoreTestingRecoveryPointSelection `json:"recoveryPointSelection"`
	Tags                   *tags.Tags                            `json:"tags,omitempty"`
	RestoreTestingPlanName string                                `json:"restoreTestingPlanName"`
	RestoreTestingPlanArn  string                                `json:"restoreTestingPlanArn"`
	ScheduleExpression     string                                `json:"scheduleExpression,omitempty"`
	StartWindowHours       int64                                 `json:"startWindowHours,omitempty"`
}

RestoreTestingPlan represents an AWS Backup restore testing plan.

RecoveryPointSelection is required on RestoreTestingPlanForGet (types.go:2307-2371) -- gopherstack had no field for it at all until this pass, so GetRestoreTestingPlan dropped a required response member entirely for every plan (gopherstack-r80d batch 11). It is not required on RestoreTestingPlanForList (types.go:2376-2419, no such member exists there at all), so ListRestoreTestingPlans correctly omits it.

type RestoreTestingRecoveryPointSelection added in v1.5.0

type RestoreTestingRecoveryPointSelection struct {
	Algorithm           string   `json:"algorithm,omitempty"`
	ExcludeVaults       []string `json:"excludeVaults,omitempty"`
	IncludeVaults       []string `json:"includeVaults,omitempty"`
	RecoveryPointTypes  []string `json:"recoveryPointTypes,omitempty"`
	SelectionWindowDays int32    `json:"selectionWindowDays,omitempty"`
}

RestoreTestingRecoveryPointSelection selects which recovery points a restore testing plan draws from (aws-sdk-go-v2/service/backup/types.RestoreTestingRecoveryPointSelection). None of its own members are Smithy-required -- only the pointer itself is required on RestoreTestingPlanForGet/-ForCreate -- so a real client can send an empty object.

type RestoreTestingSelection

type RestoreTestingSelection struct {
	CreationTime time.Time `json:"creationTime"`
	// UpdateTime is required on UpdateRestoreTestingSelectionOutput
	// (api_op_UpdateRestoreTestingSelection.go) but nil until the
	// selection's first update.
	UpdateTime                  *time.Time                   `json:"updateTime,omitempty"`
	ProtectedResourceConditions *ProtectedResourceConditions `json:"protectedResourceConditions,omitempty"`
	RestoreMetadataOverrides    map[string]string            `json:"restoreMetadataOverrides,omitempty"`
	RestoreTestingPlanName      string                       `json:"restoreTestingPlanName"`
	RestoreTestingSelectionName string                       `json:"restoreTestingSelectionName"`
	RestoreTestingPlanArn       string                       `json:"restoreTestingPlanArn"`
	ProtectedResourceType       string                       `json:"protectedResourceType,omitempty"`
	// IAMRoleArn is required by real AWS (StartRestoreJob's IamRoleArn for
	// scheduled restore tests uses this role) but was entirely absent from
	// this backend's model until this pass.
	IAMRoleArn            string   `json:"iamRoleArn,omitempty"`
	ProtectedResourceArns []string `json:"protectedResourceArns,omitempty"`
	ValidationWindowHours int64    `json:"validationWindowHours,omitempty"`
}

RestoreTestingSelection represents a selection within a restore testing plan.

type RestoreTestingSelectionInput added in v1.2.0

type RestoreTestingSelectionInput struct {
	ProtectedResourceConditions *ProtectedResourceConditions
	RestoreMetadataOverrides    map[string]string
	ProtectedResourceType       string
	IAMRoleArn                  string
	ProtectedResourceArns       []string
	ValidationWindowHours       int64
}

RestoreTestingSelectionInput holds the fields accepted by CreateRestoreTestingSelection/UpdateRestoreTestingSelection beyond the plan/selection name -- mirrors AWS's RestoreTestingSelectionForCreate / RestoreTestingSelectionForUpdate closely enough that both ops can share one Go-side type.

type Rule

type Rule struct {
	RecoveryPointTags          map[string]string `json:"recoveryPointTags,omitempty"`
	Lifecycle                  *Lifecycle        `json:"lifecycle,omitempty"`
	RuleName                   string            `json:"ruleName"`
	RuleID                     string            `json:"ruleId,omitempty"`
	TargetVaultName            string            `json:"targetVaultName"`
	ScheduleExpression         string            `json:"scheduleExpression,omitempty"`
	ScheduleExpressionTimezone string            `json:"scheduleExpressionTimezone,omitempty"`
	CopyActions                []CopyAction      `json:"copyActions,omitempty"`
	StartWindowMinutes         int64             `json:"startWindowMinutes,omitempty"`
	CompletionWindowMinutes    int64             `json:"completionWindowMinutes,omitempty"`
	EnableContinuousBackup     bool              `json:"enableContinuousBackup,omitempty"`
}

Rule represents a single rule in a backup plan.

type S3Backend

type S3Backend interface {
	HeadBucket(ctx context.Context, input *sdk_s3.HeadBucketInput) (*sdk_s3.HeadBucketOutput, error)
}

S3Backend is the subset of S3 operations Backup needs to check whether a StartBackupJob ResourceArn naming an S3 bucket resolves to a bucket that actually exists, wired via SetS3Backend. When unset, ResourceArn is validated for non-emptiness only, matching this repo's unwired-hook-stays-permissive convention.

type ScanJob

type ScanJob struct {
	CreationTime             time.Time  `json:"creationTime"`
	CompletionTime           *time.Time `json:"completionTime,omitempty"`
	ContinuousScanEndTime    *time.Time `json:"continuousScanEndTime,omitempty"`
	ScanJobID                string     `json:"scanJobId"`
	BackupVaultArn           string     `json:"backupVaultArn"`
	BackupVaultName          string     `json:"backupVaultName"`
	Status                   string     `json:"status"`
	IamRoleArn               string     `json:"iamRoleArn"`
	MalwareScanner           string     `json:"malwareScanner"`
	RecoveryPointArn         string     `json:"recoveryPointArn"`
	ResourceArn              string     `json:"resourceArn,omitempty"`
	ResourceName             string     `json:"resourceName,omitempty"`
	ResourceType             string     `json:"resourceType,omitempty"`
	ScanMode                 string     `json:"scanMode"`
	ScannerRoleArn           string     `json:"scannerRoleArn"`
	AccountID                string     `json:"accountId"`
	IdempotencyToken         string     `json:"idempotencyToken,omitempty"`
	ScanBaseRecoveryPointArn string     `json:"scanBaseRecoveryPointArn,omitempty"`
}

ScanJob represents an AWS Backup restore testing scan job. ScanJob represents an AWS Backup malware scan job.

AccountID/BackupVaultName/ResourceArn/ResourceType/ResourceName are required on the real DescribeScanJobOutput and types.ScanJob (types.go:2779-2871, backup@v1.59.4) but had no field at all here until gopherstack-r80d batch 11 -- DescribeScanJob/ListScanJobs's handlers returned only ScanJobId/Status, silently dropping 12+ required members. CreatedBy (types.ScanJobCreator: BackupPlanArn/Id/Version + RuleId) is also required but is NOT modeled: this backend has no association between a scan job (or the recovery point it targets) and an originating backup plan/rule, and StartScanJobInput itself carries no such reference either -- fabricating one would violate the no-fabrication rule, so it stays a disclosed gap (see PARITY.md).

type ScheduledPlanExecution

type ScheduledPlanExecution struct {
	ExecutionTime     time.Time
	RuleExecutionType string
	RuleID            string
}

ScheduledPlanExecution is a computed preview of one future rule execution -- never persisted, derived fresh from the plan's rules on every GetBackupPlan call, matching types.ScheduledPlanExecutionMember.

func ScheduledRunsPreview

func ScheduledRunsPreview(plan *Plan, maxResults int, now time.Time) []ScheduledPlanExecution

ScheduledRunsPreview computes up to maxResults upcoming executions across every rule in the plan, merged and sorted by time -- GetBackupPlanOutput's documented behavior for MaxScheduledRunsPreview > 0. A rule with an unparseable ScheduleExpression is skipped rather than aborting the whole preview (real AWS validates ScheduleExpression at CreateBackupPlan/ UpdateBackupPlan time; this backend does not model that validation, so a malformed expression can only be reached by a caller bypassing it).

type Selection

type Selection struct {
	CreationTime  time.Time            `json:"creationTime"`
	Conditions    *SelectionConditions `json:"conditions,omitempty"`
	SelectionName string               `json:"selectionName"`
	SelectionID   string               `json:"selectionId"`
	BackupPlanID  string               `json:"backupPlanId"`
	IAMRoleArn    string               `json:"iamRoleArn,omitempty"`
	Resources     []string             `json:"resources,omitempty"`
	NotResources  []string             `json:"notResources,omitempty"`
	ListOfTags    []TagCondition       `json:"listOfTags,omitempty"`
}

Selection represents an AWS Backup selection (resources assigned to a plan).

type SelectionConditions

type SelectionConditions struct {
	StringEquals    []StringCondition `json:"stringEquals,omitempty"`
	StringLike      []StringCondition `json:"stringLike,omitempty"`
	StringNotEquals []StringCondition `json:"stringNotEquals,omitempty"`
	StringNotLike   []StringCondition `json:"stringNotLike,omitempty"`
}

SelectionConditions holds fine-grained string-match conditions for resource selection.

type Settings

type Settings struct {
	JanitorInterval time.Duration `json:"janitor_interval" env:"BACKUP_JANITOR_INTERVAL" default:"1m"  help:"Janitor tick interval."` //nolint:lll // Kong struct tag makes this line long
	JobTTL          time.Duration ``                                                                                                  //nolint:lll // Kong struct tag makes this line long
	/* 129-byte string literal not displayed */
}

Settings holds service-level configuration for the Backup backend. Fields are picked up by the Kong CLI parser when this struct is embedded in the root CLI command.

type StartBackupJobInput

type StartBackupJobInput struct {
	BackupOptions      map[string]string
	RecoveryPointTags  map[string]string
	Lifecycle          *Lifecycle
	VaultName          string
	ResourceArn        string
	IAMRoleArn         string
	ResourceType       string
	IdempotencyToken   string
	StartWindowMinutes int64
}

StartBackupJobInput is the full StartBackupJob request.

type StartScanJobInput added in v1.3.1

type StartScanJobInput struct {
	ContinuousScanEndTime    *time.Time
	BackupVaultName          string
	IamRoleArn               string
	MalwareScanner           string
	RecoveryPointArn         string
	ScanMode                 string
	ScannerRoleArn           string
	IdempotencyToken         string
	ScanBaseRecoveryPointArn string
}

StartScanJobInput mirrors StartScanJobInput in the pinned SDK (api_op_StartScanJob.go:29-75): BackupVaultName, IamRoleArn, MalwareScanner, RecoveryPointArn, ScanMode and ScannerRoleArn are all required; the rest are optional.

type StringCondition

type StringCondition struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

StringCondition holds a single key/value match condition for resource selection.

type TagCondition

type TagCondition struct {
	ConditionType  string `json:"conditionType"`
	ConditionKey   string `json:"conditionKey"`
	ConditionValue string `json:"conditionValue"`
}

TagCondition is a single tag-based resource selection filter.

type TaggedEntry added in v1.2.0

type TaggedEntry struct {
	Tags map[string]string
	ARN  string
}

TaggedEntry pairs a resource ARN with its tag map, for cross-service tag enumeration by the Resource Groups Tagging API (see cli.go's wireTaggingBackup).

type TieringConfiguration

type TieringConfiguration struct {
	CreationTime             time.Time           `json:"creationTime"`
	LastUpdatedTime          *time.Time          `json:"lastUpdatedTime,omitempty"`
	TieringConfigurationName string              `json:"tieringConfigurationName"`
	TieringConfigurationArn  string              `json:"tieringConfigurationArn"`
	BackupVaultName          string              `json:"backupVaultName"`
	CreatorRequestID         string              `json:"creatorRequestId,omitempty"`
	ResourceSelection        []ResourceSelection `json:"resourceSelection"`
}

TieringConfiguration holds a tiering configuration.

Keyed by TieringConfigurationName (matching AWS -- CreateTieringConfigurationInput's TieringConfigurationInputForCreate nests BackupVaultName + ResourceSelection under a top-level TieringConfigurationName, and Get/List/Delete/Update all address configurations by that name, never by vault name).

type Vault

type Vault struct {
	CreationTime           time.Time  `json:"creationTime"`
	Tags                   *tags.Tags `json:"tags,omitempty"`
	BackupVaultName        string     `json:"backupVaultName"`
	BackupVaultArn         string     `json:"backupVaultArn"`
	EncryptionKeyArn       string     `json:"encryptionKeyArn,omitempty"`
	CreatorRequestID       string     `json:"creatorRequestId,omitempty"`
	VaultType              string     `json:"vaultType,omitempty"`
	AccountID              string     `json:"accountId"`
	Region                 string     `json:"region"`
	NumberOfRecoveryPoints int64      `json:"numberOfRecoveryPoints"`
	MinRetentionDays       int64      `json:"minRetentionDays,omitempty"`
	MaxRetentionDays       int64      `json:"maxRetentionDays,omitempty"`
}

Vault represents an AWS Backup vault.

The Tags field is backend-owned. Callers must treat the returned pointer as read-only; mutate tags only via TagResource / CreateBackupVault.

type VaultAccessPolicy

type VaultAccessPolicy struct {
	VaultName string `json:"vaultName"`
	Policy    string `json:"policy"`
}

VaultAccessPolicy holds an access policy document for a backup vault.

VaultName is not part of the AWS wire shape; it exists purely so store.Table's keyFn can derive a key from the value itself, and carries a real json tag (not "-") since this table is persisted -- see store_setup.go.

type VaultLockConfig

type VaultLockConfig struct {
	LockDate          *time.Time `json:"lockDate,omitempty"`
	VaultName         string     `json:"vaultName"`
	MinRetentionDays  int64      `json:"minRetentionDays,omitempty"`
	MaxRetentionDays  int64      `json:"maxRetentionDays,omitempty"`
	ChangeableForDays int64      `json:"changeableForDays,omitempty"`
}

VaultLockConfig holds the lock configuration for a backup vault.

VaultName is not part of the AWS wire shape; it exists purely so store.Table's keyFn can derive a key from the value itself, and carries a real json tag (not "-") since this table is persisted -- see store_setup.go.

type VaultNotificationConfig

type VaultNotificationConfig struct {
	VaultName         string   `json:"vaultName"`
	SNSTopicArn       string   `json:"snsTopicArn"`
	BackupVaultEvents []string `json:"backupVaultEvents"`
}

VaultNotificationConfig holds notification settings for a backup vault.

VaultName is not part of the AWS wire shape; it exists purely so store.Table's keyFn can derive a key from the value itself, and carries a real json tag (not "-") since this table is persisted -- see store_setup.go.

type VolumeInfo

type VolumeInfo struct {
	AZ         string `json:"az"`
	VolumeType string `json:"volumeType"`
	Size       int    `json:"size"`
}

VolumeInfo is the EBS volume shape a backup captures.

type VolumeService

type VolumeService interface {
	DescribeVolume(id string) (VolumeInfo, bool)
	CreateVolume(info VolumeInfo) (string, error)
}

VolumeService is the EC2 surface used to snapshot and restore EBS volumes.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL