このクイック スタートでは、Azure App Configuration で機能フラグを作成し、それを使用して GoGin Web アプリで新しい Web ページを再起動または再デプロイすることなく、新しい Web ページの可用性を動的に制御します。
機能管理のサポートにより、App Configuration の動的構成機能が拡張されます。 この例では、リアルタイム更新と条件付きページ レンダリングを使用して、機能フラグを Go Gin Web アプリケーションに統合する方法を示します。
[前提条件]
- アクティブなサブスクリプションを持つ Azure アカウント。 無料で作成できます。
- アプリ設定ストア。 ストアを作成する。
- 1.21 以降に進む。 Go のインストールについては、 Go のダウンロード ページを参照してください。
- Azure App Configuration Go プロバイダー v1.1.0 以降。
機能フラグを作成する
App Configuration ストアに Beta という機能フラグを追加し、 ラベル と 説明 を既定値のままにします。 Azure portal または CLI を使用してストアに機能フラグを追加する方法の詳細については、「 機能フラグの作成」を参照してください。
Go Web アプリケーションを作成する
Go プロジェクトの新しいディレクトリを作成し、そこに移動します。
mkdir gin-feature-flag-quickstart cd gin-feature-flag-quickstart新しい Go モジュールを初期化します。
go mod init gin-feature-flag-quickstartAzure App Configuration、Gin Web フレームワーク、および機能管理に必要な Go パッケージをインストールします。
go get github.com/gin-gonic/gin go get github.com/microsoft/Featuremanagement-Go/featuremanagement go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfigHTML テンプレートのテンプレート ディレクトリを作成し、必要な HTML ファイルを追加します。
mkdir templatesGitHub リポジトリから次の HTML テンプレート ファイルを追加し、
templatesディレクトリに配置します。-
index.html- ホーム ページ テンプレート -
beta.html- ベータ 版ページ テンプレート
-
機能フラグを使用する
次の内容を含む
appconfig.goという名前のファイルを作成します。 Microsoft Entra ID (推奨) または接続文字列を使用して App Configuration ストアに接続できます。package main import ( "context" "log" "os" "github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" ) func loadAzureAppConfiguration(ctx context.Context) (*azureappconfiguration.AzureAppConfiguration, error) { // Get the endpoint from environment variable endpoint := os.Getenv("AZURE_APPCONFIG_ENDPOINT") if endpoint == "" { log.Fatal("AZURE_APPCONFIG_ENDPOINT environment variable is not set") } // Create a credential using DefaultAzureCredential credential, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("Failed to create credential: %v", err) } // Set up authentication options with endpoint and credential authOptions := azureappconfiguration.AuthenticationOptions{ Endpoint: endpoint, Credential: credential, } // Configure feature flag options options := &azureappconfiguration.Options{ FeatureFlagOptions: azureappconfiguration.FeatureFlagOptions{ Enabled: true, RefreshOptions: azureappconfiguration.RefreshOptions{ Enabled: true, }, }, } // Load configuration from Azure App Configuration appConfig, err := azureappconfiguration.Load(ctx, authOptions, options) if err != nil { log.Fatalf("Failed to load configuration: %v", err) } return appConfig, nil }ヒント
FeatureFlagOptionsでセレクターが指定されていない場合は、App Configuration ストアにラベルのないすべての機能フラグが読み込まれます。 機能フラグの既定の更新間隔は 30 秒です。 この動作は、RefreshOptionsパラメーターを使用してカスタマイズできます。 たとえば、次のコード スニペットは、"キー名" が "TestApp" で始まり、ラベル "dev" がある機能フラグのみを読み込みます。 このコードは、更新間隔を 5 分に変更もします。 この更新間隔は、通常のキー値の場合とは別であることに注意してください。azureappconfiguration.FeatureFlagOptions{ Enabled: true, Selectors: []azureappconfiguration.Selector{ { KeyFilter: "TestApp:*", LabelFilter: "dev", }, }, RefreshOptions: azureappconfiguration.RefreshOptions{ Enabled: true, Interval: 5 * time.Minute, }, }次の内容を含む
main.goという名前のファイルを作成します。package main import ( "context" "fmt" "log" "net/http" "os" "github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration" "github.com/gin-gonic/gin" "github.com/microsoft/Featuremanagement-Go/featuremanagement" "github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig" ) type WebApp struct { featureManager *featuremanagement.FeatureManager appConfig *azureappconfiguration.AzureAppConfiguration } func (app *WebApp) refreshMiddleware() gin.HandlerFunc { return func(c *gin.Context) { go func() { ctx := context.Background() if err := app.appConfig.Refresh(ctx); err != nil { log.Printf("Error refreshing configuration: %v", err) } }() c.Next() } } func (app *WebApp) featureMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // Check if Beta feature is enabled betaEnabled, err := app.featureManager.IsEnabled("Beta") if err != nil { log.Printf("Error checking Beta feature: %v", err) betaEnabled = false } // Store feature flag status for use in templates c.Set("betaEnabled", betaEnabled) c.Next() } } func (app *WebApp) setupRoutes(r *gin.Engine) { r.Use(app.refreshMiddleware()) r.Use(app.featureMiddleware()) // Load HTML templates r.LoadHTMLGlob("templates/*.html") // Routes r.GET("/", app.homeHandler) r.GET("/beta", app.betaHandler) } // Home page handler func (app *WebApp) homeHandler(c *gin.Context) { betaEnabled := c.GetBool("betaEnabled") c.HTML(http.StatusOK, "index.html", gin.H{ "title": "Feature Management Example App", "betaEnabled": betaEnabled, }) } // Beta page handler func (app *WebApp) betaHandler(c *gin.Context) { betaEnabled := c.GetBool("betaEnabled") if !betaEnabled { return } c.HTML(http.StatusOK, "beta.html", gin.H{ "title": "Beta Page", }) } func main() { ctx := context.Background() // Load Azure App Configuration appConfig, err := loadAzureAppConfiguration(ctx) if err != nil { log.Fatalf("Error loading Azure App Configuration: %v", err) } // Create feature flag provider featureFlagProvider, err := azappconfig.NewFeatureFlagProvider(appConfig) if err != nil { log.Fatalf("Error creating feature flag provider: %v", err) } // Create feature manager featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, nil) if err != nil { log.Fatalf("Error creating feature manager: %v", err) } // Create web app app := &WebApp{ featureManager: featureManager, appConfig: appConfig, } // Set up Gin with default middleware (Logger and Recovery) r := gin.Default() // Set up routes app.setupRoutes(r) // Start server fmt.Println("Starting server on http://localhost:8080") fmt.Println("Open http://localhost:8080 in your browser") fmt.Println("Toggle the 'Beta' feature flag in Azure portal to see changes") fmt.Println() if err := r.Run(":8080"); err != nil { log.Fatalf("Failed to start server: %v", err) } }
Web アプリケーションの実行
認証用の環境変数を設定 し、アプリケーションを実行します。
go mod tidy go run .ブラウザー ウィンドウを開き、
http://localhost:8080に移動します。 ブラウザーに、次の画像のようなページが表示されます。
Azure portal にサインインします。 [すべてのリソース] を選択し、前に作成した App Configuration ストアを選択します。
機能マネージャーを選択し、ベータ機能フラグを見つけます。 [有効] の下にあるチェック ボックスをオンにして、フラグを 有効にします。
ブラウザーを数回更新します。 更新間隔の時間枠が経過すると、ページに更新されたコンテンツが表示されます。
ナビゲーション バーに [ベータ] メニュー項目が表示されます。 それをクリックしてベータ版ページにアクセスします。
リソースをクリーンアップする
この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。
Von Bedeutung
リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。
- Azure portal にサインインし、 [リソース グループ] を選択します。
- [名前でフィルター] ボックスにリソース グループの名前を入力します。
- 結果一覧でリソース グループ名を選択し、概要を表示します。
- [リソース グループの削除] を選択します。
- リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。
しばらくすると、リソース グループとそのすべてのリソースが削除されます。
次のステップ
このクイック スタートでは、Azure App Configuration で機能フラグを作成し、Go Gin Web アプリケーションで使用しました。 Feature Management Go ライブラリには、Azure App Configuration とシームレスに統合される機能フラグ機能が用意されています。その他の機能については、次のドキュメントに進んでください。
機能フラグを使用すると、アプリの機能をアクティブ化または非アクティブ化できますが、アプリのロジックに基づいて機能フラグをカスタマイズすることも必要になる場合があります。 機能フィルターを使用すると、機能フラグを条件に応じて有効にできます。 詳細については、次のチュートリアルに進んでください。
Azure App Configuration には、特定の期間またはアプリの特定の対象ユーザーに対してのみ機能フラグをアクティブ化できる組み込みの機能フィルターが用意されています。 詳細については、次のチュートリアルに進んでください。