Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Azure Function で App Settings / Connection String で使ってはいけない名前

今日は同僚とどっぷりハマった内容を。

Azure Functions の、 Queue Trigger を使った時に、私の同僚の環境だとちゃんとデキューするのに、私の環境だと動かなかった。同僚といろいろ試してみると、私の環境だと、App Setting で指定する、Queue Trigger の名前が "Storage" だったらダメだけど、他の名前だったら動くという全く意味不明な振る舞いが判明した。

Function02.png

原因はわからないので、Issue をあげてみた

彼がここで、App Settings とっているといったコードを見て分かった事。

      internal static readonly string Prefix = "AzureWebJobs";

        /// <summary>

        /// Attempts to first read a connection string from the connectionStrings configuration section.

        /// If not found there, it will attempt to read from environment variables.

        /// </summary>

        /// <param name="connectionStringName">The name of the connection string to look up.</param>

        /// <returns>The connection string, or <see langword="null"/> if no connection string was found.</returns>

        public string GetConnectionString(string connectionStringName)

        {

            // first try prefixing

            string prefixedConnectionStringName = GetPrefixedConnectionStringName(connectionStringName);

            string connectionString = ConfigurationUtility.GetConnectionFromConfigOrEnvironment(prefixedConnectionStringName);



            if (string.IsNullOrEmpty(connectionString))

            {

                // next try a direct unprefixed lookup

                connectionString = ConfigurationUtility.GetConnectionFromConfigOrEnvironment(connectionStringName);

            }



            return connectionString;

        }


これやと、Storage と記述して、もし、AzureWebJobsStorage というのがセットされていたら、こっちが勝つがな。そして、AzureWebJobsStorage というのは先に登録されているので、そっちのほうが読み込まれる。

同僚の環境で動いたのは、同僚の環境だと、AzureWebJobsStorage の StorageAccount が Queue のものと同一だったから。その同僚が、こんなコードを発見してくれた。

namespace Microsoft.Azure.WebJobs

{

    /// <summary>Defines connection string names used by <see cref="IConnectionStringProvider"/>.</summary>

    public static class ConnectionStringNames

    {

        /// <summary>Gets the dashboard connection string name.</summary>

        public static readonly string Dashboard = "Dashboard";



        /// <summary>Gets the Azure Storage connection string name.</summary>

        public static readonly string Storage = "Storage";



        /// <summary>Gets the Azure ServiceBus connection string name.</summary>

        public static readonly string ServiceBus = "ServiceBus";

    }

}

結論

Azure Functions の AppSettings/Connection String には、Storage, Dashboard, ServiceBus という名前は付けてはいけない。

以上です!

リソース

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?