Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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 という名前は付けてはいけない。

以上です!

リソース

TsuyoshiUshio@github
プログラマ。自分の学習用のブログです。内容は会社とは一切関係ありません。
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした