【问题标题】:Azure Service Fabric - Configure service instance parameters using PowershellAzure Service Fabric - 使用 Powershell 配置服务实例参数
【发布时间】:2018-10-19 00:19:14
【问题描述】:

是否可以在运行时通过 Settings.xml 文件或其他方式将参数注入来宾可执行文件?我有一个 GuestExecutable ,我需要将一些配置传递给它 - 在服务创建时的 URL。

我需要两个使用不同参数运行的服务实例,服务实例信息必须根据我需要传递的自定义参数而有所不同。是否可以使用 Powershell,或者我是否需要对配置进行版本化并创建一个新版本?

提前致谢

【问题讨论】:

    标签: powershell azure-service-fabric


    【解决方案1】:

    您是否尝试过以下命令:New-ServiceFabricApplication

    当您创建应用程序清单文件时,参数将包含您在注册新应用程序时设置的可替换参数。

    这样的 ApplicationManifest.xml 示例:

    <?xml version="1.0" encoding="utf-8"?>
    <ApplicationManifest ApplicationTypeName="MyAppTypeName" ApplicationTypeVersion="1.0.0" xmlns=...>
      <Parameters>
        <Parameter Name="Web1_InstanceCount" Value="-1" />
        <Parameter Name="ENVIRONMENT_NAME" Value="DEV" />
        <Parameter Name="FEPlacementConstraints" Value="NodeTypeName==FrontEnd" />
      </Parameters>
      <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
        <ConfigOverrides />
        <EnvironmentOverrides />
      </ServiceManifestImport>
      <DefaultServices>
        <Service Name="Web1">
          <StatelessService ServiceTypeName="MyServiceType" InstanceCount="[Web1_InstanceCount]">
            <SingletonPartition />
            <PlacementConstraints>[FEPlacementConstraints]</PlacementConstraints>
          </StatelessService>
        </Service>
      </DefaultServices>
    </ApplicationManifest>
    

    您可以使用这样的配置覆盖来更改设置文件:

    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="MyConfigSection">
            <Parameter Name="MySetting" Value="[ENVIRONMENT_NAME]"/>
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
    

    或者你可以像这样在你的服务上设置环境变量:

    <EnvironmentOverrides CodePackageRef="Code">
      <EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="[ENVIRONMENT_NAME]" />
    </EnvironmentOverrides>
    

    在我看来,环境覆盖会更适合您的情况, 因为大多数来宾可执行文件在如何配置它们方面并不灵活,但通常它们接受环境变量。

    那么你:

    New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-dev -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='DEV'}
    
    New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-uat -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='UAT'}
    

    这种方法的唯一缺点是您最终会得到两个应用程序,但不要认为这对您来说是个问题,它们的管理方式与您对单个应用程序的管理方式基本相同。

    如果您严格需要在同一个应用程序上同时运行两者,您可以采取一些解决方法:

    • 使用多个 Config 包(认为不能很好地与客户可执行文件一起使用,但可以很好地与可靠的服务一起使用

    • 使用启动脚本,您可以在其中添加将参数传递给启动 exe 的逻辑,如下所示:

    在您的 ServiceManifest.xml 中:

      <CodePackage Name="Code" Version="1.0.0">
        <EntryPoint>
          <ExeHost>
            <Program>start.bat</Program>
            <WorkingFolder>CodePackage</WorkingFolder>
          </ExeHost>
        </EntryPoint>
      </CodePackage>
    

    在您的 .exe 的同一文件夹(代码)上,创建包含以下内容的 start.bat 文件:

    myApp.exe %EnvironmentVariableNameSetBySF%
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2017-12-17
      • 2016-04-07
      • 2018-09-18
      • 2016-08-15
      • 2016-03-13
      • 2017-10-01
      相关资源
      最近更新 更多