Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Microsoft Azure ServiceFabricで複数のサービスで設定値を共通化したい

$
0
0

同じDBに繋ぐときとか一か所で設定を終えたいですよね。 ということで手順を備忘録的に残しておこうと思います。基本的には以下に書いてあることです。

Service Fabric での複数の環境の管理 | Microsoft Docs

Step1

サービスのプロジェクト/PackageRoot/COnfig/Settings.xmlに設定値を書く。これは設定を共通化したいプロジェクトが2個あったら2個ともにやります。

<?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"><!-- これは StateManager のレプリケーターにより使用されます。--><Section Name="ReplicatorConfig"><Parameter Name="ReplicatorEndpoint"Value="ReplicatorEndpoint" /></Section><!-- これは StateManager のレプリケーション トラフィックをセキュリティで保護するために使用されます。--><Section Name="ReplicatorSecurityConfig" /><!-- ここで、カスタム構成セクションとパラメーターを追加します。--><!--<Section Name="MyConfigSection"><Parameter Name="MyParameter" Value="Value1" /></Section>  --><!-- これを追加 --><Section Name="UserDatabase"><Parameter Name="ConnectionString"Value="" /></Section></Settings>

Valueにはなんか書いてもかまいませんが、どうせ後で上書きされるので適当な値を突っ込んでおきましょう。

Step2

アプリケーションのプロジェクトのApplicationPackageRoot/ApplicationManifest.xmlのServiceManifestImportのConfigOverridesで先ほどの設定をオーバーライドする定義を追加します。これも2サービスあったら2つぶんやります。

Valueのところでかっこで囲っているのがパラメータ名になります。

<ServiceManifestImport><ServiceManifestRef ServiceManifestName="Stateful1Pkg"ServiceManifestVersion="1.0.0" /><ConfigOverrides><!-- こんな感じ --><ConfigOverride Name="Config"><Settings><Section Name="UserDatabase"><Parameter Name="ConnectionString"Value="[ConnectionString]" /></Section></Settings></ConfigOverride></ConfigOverrides><!-- ServicePackage から ServiceManifest をインポートします。ServiceManifestName と ServiceManifestVersion は、     ServiceManifest.xml ファイルで定義されている ServiceManifest 要素の [Name] 属性と [Version] 属性と 一致しなければなりません。--></ServiceManifestImport>

そして、同じファイルのParametersタグに先ほど追加したかっこで囲ったパラメータ名のパラメータを追加します。

<Parameters><Parameter Name="Stateful1_MinReplicaSetSize"DefaultValue="3" /><Parameter Name="Stateful1_PartitionCount"DefaultValue="1" /><Parameter Name="Stateful1_TargetReplicaSetSize"DefaultValue="3" /><Parameter Name="Stateless1_InstanceCount"DefaultValue="-1" /><!-- これを追加 --><Parameter Name="ConnectionString"DefaultValue="DefaultConnectionString" /></Parameters>

Step3

アプリケーションのプロジェクトのAplicationParametersフォルダの下にある構成単位のxmlファイルの中身を構成に合わせて設定します。 Local.Node1.xmlやLocal.Node5.xmlの場合はローカルDBの接続文字列とか、Cloud.xmlはSQL Databaseとかいった感じです。

こんな風になります。

<?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:/Application1"xmlns="http://schemas.microsoft.com/2011/01/fabric"><Parameters><Parameter Name="Stateful1_PartitionCount"Value="1" /><Parameter Name="Stateful1_MinReplicaSetSize"Value="1" /><Parameter Name="Stateful1_TargetReplicaSetSize"Value="1" /><Parameter Name="Stateless1_InstanceCount"Value="1" /><!-- これを追加 --><Parameter Name="ConnectionString"Value="Node1ConnectionString" /></Parameters></Application>

Step4

定義は完了です。あとはコードからの参照方法ですが以下のようなコードで出来ます。

this.Context
  .CodePackageActivationContext
  .GetConfigurationPackageObject("Config")
  .Settings
  .Sections["UserDatabase"]
  .Parameters["ConnectionString"]
  .Value

長いですね。記述場所はStatefulやStatelesの中になります。Contextにアクセスできれば何処で書いてもOKです。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>