azure-appconfiguration-ts

安装量: 48
排名: #15384

安装

npx skills add https://github.com/sickn33/antigravity-awesome-skills --skill azure-appconfiguration-ts

Azure App Configuration SDK for TypeScript Centralized configuration management with feature flags and dynamic refresh. Installation

Low-level CRUD SDK

npm install @azure/app-configuration @azure/identity

High-level provider (recommended for apps)

npm install @azure/app-configuration-provider @azure/identity

Feature flag management

npm install @microsoft/feature-management Environment Variables AZURE_APPCONFIG_ENDPOINT = https:// < your-resource

.azconfig.io

OR

AZURE_APPCONFIG_CONNECTION_STRING

Endpoint

https:// .. . ; Id = .. . ; Secret = .. . Authentication import { AppConfigurationClient } from "@azure/app-configuration" ; import { DefaultAzureCredential } from "@azure/identity" ; // DefaultAzureCredential (recommended) const client = new AppConfigurationClient ( process . env . AZURE_APPCONFIG_ENDPOINT ! , new DefaultAzureCredential ( ) ) ; // Connection string const client2 = new AppConfigurationClient ( process . env . AZURE_APPCONFIG_CONNECTION_STRING ! ) ; CRUD Operations Create/Update Settings // Add new (fails if exists) await client . addConfigurationSetting ( { key : "app:settings:message" , value : "Hello World" , label : "production" , contentType : "text/plain" , tags : { environment : "prod" } , } ) ; // Set (create or update) await client . setConfigurationSetting ( { key : "app:settings:message" , value : "Updated value" , label : "production" , } ) ; // Update with optimistic concurrency const existing = await client . getConfigurationSetting ( { key : "myKey" } ) ; existing . value = "new value" ; await client . setConfigurationSetting ( existing , { onlyIfUnchanged : true } ) ; Read Settings // Get single setting const setting = await client . getConfigurationSetting ( { key : "app:settings:message" , label : "production" , // optional } ) ; console . log ( setting . value ) ; // List with filters const settings = client . listConfigurationSettings ( { keyFilter : "app:" , labelFilter : "production" , } ) ; for await ( const setting of settings ) { console . log ( ${ setting . key } : ${ setting . value } ) ; } Delete Settings await client . deleteConfigurationSetting ( { key : "app:settings:message" , label : "production" , } ) ; Lock/Unlock (Read-Only) // Lock await client . setReadOnly ( { key : "myKey" , label : "prod" } , true ) ; // Unlock await client . setReadOnly ( { key : "myKey" , label : "prod" } , false ) ; App Configuration Provider Load Configuration import { load } from "@azure/app-configuration-provider" ; import { DefaultAzureCredential } from "@azure/identity" ; const appConfig = await load ( process . env . AZURE_APPCONFIG_ENDPOINT ! , new DefaultAzureCredential ( ) , { selectors : [ { keyFilter : "app:" , labelFilter : "production" } , ] , trimKeyPrefixes : [ "app:" ] , } ) ; // Map-style access const value = appConfig . get ( "settings:message" ) ; // Object-style access const config = appConfig . constructConfigurationObject ( { separator : ":" } ) ; console . log ( config . settings . message ) ; Dynamic Refresh const appConfig = await load ( endpoint , credential , { selectors : [ { keyFilter : "app:" } ] , refreshOptions : { enabled : true , refreshIntervalInMs : 30_000 , // 30 seconds } , } ) ; // Trigger refresh (non-blocking) appConfig . refresh ( ) ; // Listen for refresh events const disposer = appConfig . onRefresh ( ( ) => { console . log ( "Configuration refreshed!" ) ; } ) ; // Express middleware pattern app . use ( ( req , res , next ) => { appConfig . refresh ( ) ; next ( ) ; } ) ; Key Vault References const appConfig = await load ( endpoint , credential , { selectors : [ { keyFilter : "app:" } ] , keyVaultOptions : { credential : new DefaultAzureCredential ( ) , secretRefreshIntervalInMs : 7200_000 , // 2 hours } , } ) ; // Secrets are automatically resolved const dbPassword = appConfig . get ( "database:password" ) ; Feature Flags Create Feature Flag (Low-Level) import { featureFlagPrefix , featureFlagContentType , FeatureFlagValue , ConfigurationSetting , } from "@azure/app-configuration" ; const flag : ConfigurationSetting < FeatureFlagValue

= { key : ${ featureFlagPrefix } Beta , contentType : featureFlagContentType , value : { id : "Beta" , enabled : true , description : "Beta feature" , conditions : { clientFilters : [ { name : "Microsoft.Targeting" , parameters : { Audience : { Users : [ "user@example.com" ] , Groups : [ { Name : "beta-testers" , RolloutPercentage : 50 } ] , DefaultRolloutPercentage : 0 , } , } , } , ] , } , } , } ; await client . addConfigurationSetting ( flag ) ; Load and Evaluate Feature Flags import { load } from "@azure/app-configuration-provider" ; import { ConfigurationMapFeatureFlagProvider , FeatureManager , } from "@microsoft/feature-management" ; const appConfig = await load ( endpoint , credential , { featureFlagOptions : { enabled : true , selectors : [ { keyFilter : "" } ] , refresh : { enabled : true , refreshIntervalInMs : 30_000 , } , } , } ) ; const featureProvider = new ConfigurationMapFeatureFlagProvider ( appConfig ) ; const featureManager = new FeatureManager ( featureProvider ) ; // Simple check const isEnabled = await featureManager . isEnabled ( "Beta" ) ; // With targeting context const isEnabledForUser = await featureManager . isEnabled ( "Beta" , { userId : "user@example.com" , groups : [ "beta-testers" ] , } ) ; Snapshots // Create snapshot const snapshot = await client . beginCreateSnapshotAndWait ( { name : "release-v1.0" , retentionPeriod : 2592000 , // 30 days filters : [ { keyFilter : "app:" , labelFilter : "production" } ] , } ) ; // Get snapshot const snap = await client . getSnapshot ( "release-v1.0" ) ; // List settings in snapshot const settings = client . listConfigurationSettingsForSnapshot ( "release-v1.0" ) ; for await ( const setting of settings ) { console . log ( ${ setting . key } : ${ setting . value } ) ; } // Archive/recover await client . archiveSnapshot ( "release-v1.0" ) ; await client . recoverSnapshot ( "release-v1.0" ) ; // Load from snapshot (provider) const config = await load ( endpoint , credential , { selectors : [ { snapshotName : "release-v1.0" } ] , } ) ; Labels // Create settings with labels await client . setConfigurationSetting ( { key : "database:host" , value : "dev-db.example.com" , label : "development" , } ) ; await client . setConfigurationSetting ( { key : "database:host" , value : "prod-db.example.com" , label : "production" , } ) ; // Filter by label const prodSettings = client . listConfigurationSettings ( { keyFilter : "*" , labelFilter : "production" , } ) ; // No label (null label) const noLabelSettings = client . listConfigurationSettings ( { labelFilter : "\0" , } ) ; // List available labels for await ( const label of client . listLabels ( ) ) { console . log ( label . name ) ; } Key Types import { AppConfigurationClient , ConfigurationSetting , FeatureFlagValue , SecretReferenceValue , featureFlagPrefix , featureFlagContentType , secretReferenceContentType , ListConfigurationSettingsOptions , } from "@azure/app-configuration" ; import { load } from "@azure/app-configuration-provider" ; import { FeatureManager , ConfigurationMapFeatureFlagProvider , } from "@microsoft/feature-management" ; Best Practices Use provider for apps - @azure/app-configuration-provider for runtime config Use low-level for management - @azure/app-configuration for CRUD operations Enable refresh - For dynamic configuration updates Use labels - Separate configurations by environment Use snapshots - For immutable release configurations Sentinel pattern - Use a sentinel key to trigger full refresh RBAC roles - App Configuration Data Reader for read-only access When to Use This skill is applicable to execute the workflow or actions described in the overview.

返回排行榜