次の方法で共有


チュートリアル: Gin Web アプリで動的構成を使用する

このチュートリアルでは、Azure App Configuration を使用して Gin Web アプリケーションに動的構成の更新を実装する方法について説明します。 これは、前のクイック スタートで紹介した Web アプリに基づいています。

[前提条件]

クイック スタートを完了する: Azure App Configuration を使用して Gin Web アプリを作成する

App Configuration からデータを再度読み込む

  1. ファイル appconfig.goを開きます。 loadAzureAppConfiguration関数内で、optionsを更新して更新を有効にします。 Go プロバイダーは、選択したキー値の変更を検出するたびに、構成全体を再読み込みします。 構成の変更の監視の詳細については、「 構成の更新のベスト プラクティス」を参照してください。

    options := &azureappconfiguration.Options{
        Selectors: []azureappconfiguration.Selector{
            {
                KeyFilter: "Config.*",
            },
        },
        TrimKeyPrefixes: []string{"Config."},
        RefreshOptions: azureappconfiguration.KeyValueRefreshOptions{
            Enabled:  true,
        },
    }
    

    ヒント

    IntervalRefreshOptions プロパティを設定して、構成の更新間隔の最小時間を指定できます。 今回の例では既定の値である 30 秒を使用します。 App Configuration ストアに対する要求の数を減らす必要がある場合は、より大きな値に調整します。

  2. main.go ファイルを更新して、構成の更新用のコールバック関数を登録します。

    // Existing code
    // ... ...
    var config Config
    if err := provider.Unmarshal(&config, nil); err != nil {
        log.Fatalf("Failed to unmarshal configuration: %v", err)
    }
    
    // Register refresh callback
    provider.OnRefreshSuccess(func() {
        // Re-unmarshal the configuration
        err := provider.Unmarshal(&config, nil)
        if err != nil {
            log.Printf("Failed to unmarshal updated configuration: %s", err)
            return
        }
    })
    
  3. 構成更新ミドルウェアを追加します。 main.go を次のコードで更新します。

    func configRefreshMiddleware(provider *azureappconfiguration.AzureAppConfiguration) gin.HandlerFunc {
        return func(c *gin.Context) {
            // Start refresh in a goroutine to avoid blocking the request
            go func() {
                ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
                defer cancel()
    
                if err := provider.Refresh(ctx); err != nil {
                    log.Printf("Error refreshing configuration: %s", err)
                }
            }()
    
            c.Next()
        }
    }
    
  4. 構成更新ミドルウェアを使用します。

    // Existing code
    // ... ...
    router := gin.Default()
    
    // Use the configuration refresh middleware
    router.Use(configRefreshMiddleware(provider))
    
    // The rest of existing code
    //... ...
    

要求ドリブン構成の更新

構成の更新は、Web アプリで受信される要求によってトリガーされます。 アプリがアイドル状態の場合、更新は行われません。 アプリがアクティブな場合、構成更新ミドルウェアは、 azureappconfiguration.Optionsで構成した選択したキー値を監視します。 ミドルウェアは、アプリで受信される要求ごとにトリガーされます。 ただし、ミドルウェアは、設定した更新間隔が経過した場合にのみ、App Configuration の値を確認する要求を送信します。

  • App Configuration に対する変更の検出の要求が失敗した場合、アプリではキャッシュされた構成が引き続き使用されます。 アプリへの新しい要求の受信がある間、変更を確認する新しい試行が定期的に行われます。
  • 構成の更新は、アプリでの要求の受信の処理とは非同期的に行われます。 更新をトリガーした受信要求をブロックしたり、速度が低下することはありません。 更新をトリガーした要求では、更新された構成値が取得されない場合がありますが、それ以降の要求では新しい構成値が取得されます。
  • ミドルウェアが確実にトリガーされるようにするには、要求パイプラインの適切なタイミングでできるだけ早く構成更新ミドルウェアを使用して、他のミドルウェアによってアプリ内でスキップされないようにします。

Web アプリケーションの実行

動的構成の更新を設定したので、それをテストして動作を確認してみましょう。

  1. アプリケーションを実行します。

    go run main.go
    
  2. Web ブラウザーを開き、 http://localhost:8080 に移動してアプリケーションにアクセスします。 Web ページは次のようになります。

    前のジン Web アプリの更新のスクリーンショット。

  3. App Configuration ストアに移動し、 Config.Message キーの値を更新します。

    価値 コンテンツの種類
    Config.Message こんにちは、Azure App Configuration - ライブアップデートが可能になりました。 空のままにします
  4. ブラウザーを数回更新すると、ConfigMap が 30 秒で更新されると、更新されたコンテンツが表示されます。

    ジン Web アプリの更新後のスクリーンショット。

リソースをクリーンアップする

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

Von Bedeutung

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。