1. ホーム
  2. azure

[解決済み] サービスファブリックの環境ごとのランタイム設定パラメータはどこで設定・アクセスするのですか?

2023-05-19 22:07:24

質問

ローカルとクラウドの 2 つの環境について、SQL データベース、ストレージ アカウントなどのリソースのカスタム設定またはパラメータをどのようにセットアップすればよいでしょうか? 理想的には、ローカルまたはクラウド環境のいずれかの構成で異なる特定のデータベースに向けて DbContext を指すと言うためにコードで呼び出される 1 つのパラメータ名でしょう。ありがとうございます。

どのように解決するのですか?

Service Fabric をローカルおよびクラウドで実行するための環境変数を設定するには、次のようにする必要があります。

  1. Service/ActorプロジェクトのSettings.xmlファイル(プロジェクトルートからは \PackageRootConfig╱Settings.xml )にカスタム設定セクションとパラメータを追加します。パラメータは環境ごとに設定するため、空白にしてください。以下はその一例です。
<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<!-- Add your custom configuration sections and parameters here -->
    <Section Name="UserDatabase">
        <Parameter Name="UserDatabaseConnectionString" Value="" />
    </Section>
</Settings>

  1. サービス・ファブリック・プロジェクトの ApplicationManifest.xml ファイルに <ServiceManifestImport> 要素があります。その下には <ConfigOverrides> 要素で、Service Fabric プロジェクトの ApplicationParameters の下にあるローカルおよびクラウドの xml ファイルで環境ごとに設定された値によって、設定のどの値が代替されるかを宣言します。同じ ApplicationManifest.xml ファイルに、ローカルとクラウドの xml ファイルに存在するパラメータを追加する必要があります。

上記の例の続きで、このように設定されます。

<Parameters>
    <Parameter Name="ServiceName_InstanceCount" DefaultValue="-1" />
    <Parameter Name="UserDatabaseConnectionString" DefaultValue="" />
</Parameters>
<ConfigOverrides>
    <ConfigOverride Name="Config">
        <Settings>
            <Section Name="UserDatabase">
                <Parameter Name="UserDatabaseConnectionString" Value="[UserDatabaseConnectionString]" />
            </Section>
        </Settings>
    </ConfigOverride>
</ConfigOverrides>

  1. Service FabricプロジェクトのApplicationParametersの下にあるlocal.xmlとcloud.xmlで、以下のように環境固有の変数を指定します。
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/AppFabricName.ServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="ServiceName_InstanceCount" Value="1" />
        <Parameter Name="UserDatabaseConnectionString" Value="Server=(localdb)\MsSqlLocalDb;Database=Users;User=ReadOnlyUser;Password=XXXXX;" />
    </Parameters>
</Application>

  1. 最後に、Service/Actorの中で、これらの環境ごとの設定変数に以下のようにアクセスすることができます。
var configurationPackage = Context.CodePackageActivationContext.GetConfigurationPackageObject("Config");

var connectionStringParameter = configurationPackage.Settings.Sections["UserDatabase"].Parameters["UserDatabaseConnectionString"];