Skip to main content

Storage Configuration

AvantiPoint Packages stores the actual package files (.nupkg) and symbol files (.snupkg) using a configured storage provider. The database stores metadata only.

Supported Storage Providers

Connection Strings

Every storage provider can be configured either with its individual settings (under the Storage section) or with a single connection string. A connection string can be supplied two ways:

  • Inline — set Storage:ConnectionString.
  • By name — set Storage:ConnectionStringName to reference an entry under the root ConnectionStrings section (for example ConnectionStrings__Storage, as supplied by a hosting platform such as .NET Aspire).

When both are present, the inline Storage:ConnectionString wins. Individually configured Storage:* fields take precedence over values parsed from the connection string, so you can combine them.

Format by provider

ProviderConnection string format
Azure BlobNative Azure Storage connection string (DefaultEndpointsProtocol=...;AccountName=...;AccountKey=...). Container is still set via Storage:Container.
AWS S3s3://accessKey:secretKey@bucket?region=us-east-1 — for S3-compatible endpoints add &endpoint=http://host:9000&forcePathStyle=true (region defaults to us-east-1). Optional &prefix=.
Google Cloud Storagegs://bucket?credentialsPath=/keys/sa.json&prefix=packages — or emulator gs://bucket?emulatorHost=http://localhost:4443&useEmulator=true.
FTP / FTPSftp://user:pass@host:21/remotePath (use ftps:// for SSL). Optional query: passive, passiveAddress, connectTimeout, readTimeout.
SFTPsftp://user:pass@host:22/remotePath — optional query: privateKeyPath, privateKeyPassphrase, maxConnections, connectionTimeout, operationTimeout.

Example (AWS S3 via a named connection string):

{
"ConnectionStrings": {
"Storage": "s3://AKIA...:secret@my-packages-bucket?region=us-east-1"
},
"Storage": {
"Type": "AwsS3",
"ConnectionStringName": "Storage"
}
}

Values with reserved characters (for example a password containing @ or /) must be URL-encoded.

Choosing a Storage Provider

FeatureFile StorageAzure BlobAWS S3GCS
Setup ComplexitySimpleMediumMediumMedium
ScalabilityLimitedUnlimitedUnlimitedUnlimited
Multi-InstanceNetwork share requiredYesYesYes
CostServer storagePay-as-you-goPay-as-you-goPay-as-you-go
Best ForDevelopment, small deploymentsAzure-hosted appsAWS-hosted appsGCP-hosted apps

Directory Structure

All storage providers organize packages in a similar structure:

packages/
newtonsoft.json/
12.0.1/
newtonsoft.json.12.0.1.nupkg
mypackage/
1.0.0/
mypackage.1.0.0.nupkg
symbols/
newtonsoft.json/
12.0.1/
newtonsoft.json.12.0.1.snupkg

This structure allows:

  • Easy browsing and debugging
  • Simple migration between providers
  • Clear organization by package ID and version

Performance Tips

Cloud Storage (Azure Blob / AWS S3)

  • Same Region: Use the same region as your application server to minimize latency
  • CDN: Enable Azure CDN or CloudFront for global distribution and caching
  • Storage Tiers: Use hot tier for frequently accessed packages, cool tier for archives
  • Redundancy: Configure appropriate redundancy (LRS, GRS, etc.) based on durability requirements

File Storage

  • Fast Disks: Use SSD storage for better I/O performance
  • Dedicated Storage: Use dedicated storage to avoid contention with application files
  • Network Shares: Use high-speed network connections for multi-instance deployments
  • Backup: Implement regular backup procedures (snapshots, rsync, etc.)

Migrating Between Providers

To migrate packages from one storage provider to another:

  1. Set up the new storage provider with appropriate credentials and configuration
  2. Copy all files from the old storage to the new storage
  3. Maintain the same directory structure (packages/ and symbols/)
  4. Update your configuration to point to the new provider
  5. Test thoroughly before switching in production

Migration Tools

File to Cloud:

Cloud to File:

  • Azure: Use azcopy or Storage Explorer
  • AWS: Use aws s3 sync

Cloud to Cloud:

  • Use provider-specific migration tools or intermediate file copy

Security Considerations

  • Access Control: Ensure storage is not publicly accessible unless intentional
  • Encryption: Enable encryption at rest (automatic in Azure and AWS)
  • Credentials: Use managed identities (Azure) or instance profiles (AWS) instead of keys
  • Network Security: Use private endpoints or VPC peering for internal-only feeds
  • Audit Logging: Enable storage audit logs for compliance

Troubleshooting

"Unable to connect to storage"

Check:

  • Storage credentials are correct
  • Network connectivity to storage endpoint
  • Firewall rules allow access
  • Managed identity or instance profile permissions

"Permission denied"

Ensure the credentials have:

  • Read permissions for package downloads
  • Write permissions for package uploads
  • List permissions for browsing

Slow Performance

Consider:

  • Using storage in the same region as your app
  • Enabling CDN for frequently accessed packages
  • Upgrading storage tier or I/O limits
  • Checking network bandwidth and latency

See Also