将Python可执行文件部署到Azure Service Fabric

时间:2016-09-19 12:33:55

标签: python azure web-deployment

我正在寻找将Python可执行文件部署到Azure Service Fabric

的有用解决方案

node js here的文档,但我找不到与python

相关的任何内容

2 个答案:

答案 0 :(得分:6)

小贴士:节省一些时间并尝试先在本地运行。我的经验是,很多事情都可能出错,其中最难确定的是节点上的执行权。

设置

将Python部署到Service Fabric所需的步骤:

     
  1. 确保在SF节点上安装了Python(包含您需要的软件包)。 有两种方法可以做到这一点:
    • 使用远程桌面使用您的端点“sf_cluster.westeurope.cloudapp.azure.com:node_port”导航到节点 其中node_port是(对我来说)3389-3393。然后通过从Python.org下载安装程序手动安装python。
    • 创建一个在Guest Executable SetupEntryPoint中调用的python安装脚本,更多关于此内容的更多信息。
    • 无论如何,你需要让Python进入节点并且确保将Python和Python / Scripts添加到节点路径。
  2. 使用Guest Executable Service创建Service Fabric应用程序。
    1. 将其指向您的python代码文件夹
    2. 选择要运行的启动文件 - 将此处留空
    3. 选择CodePackage作为工作文件夹
    4. 按确定。
    5. 您现在有一个服务结构应用程序,它将您的代码复制到您的服务结构群集但不执行任何操作。 (实际上它可能会因为没有定义端点而对你大喊大叫,但接下来就是这样)

      现在我们得到了一些黑客攻击。 Service Fabric不会像运行examples from Microsoft中的node.exe一样运行Python.exe。 所以你需要做的是创建一个run.cmd脚本,基本上这样做:

        

      python.exe main.py

      将其用作EntryPoint。

      现在,您在ServiceManifest.xml中的EntryPoint如下所示:

      ...
          <EntryPoint>
              <ExeHost>
                  <Program>run.cmd</Program>
                  <Arguments></Arguments>
                  <WorkingFolder>CodePackage</WorkingFolder>
                  <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/> //use this to get logging (very helpful ;)
              </ExeHost>
          </EntryPoint>
      </CodePackage>
      

      如果你想让 SetupEntryPoint 为你安装python,你可以这样做:

      <SetupEntryPoint>
        <ExeHost>
          <Program>Setup\setup.bat</Program>
          <WorkingFolder>CodePackage</WorkingFolder>
        </ExeHost>
      </SetupEntryPoint>
      

      我的setup.bat看起来像这样(路径有一些问题):

        

      C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -ExecutionPolicy Bypass -Command“。\ Setup \ pythonInstall.ps1”

      我的解决方案中的代码被复制到这个结构中:

      MyGuestExecutablePkg\
          |
          - Code\
              - run.cmd
              - main.py
              - Setup\
                  - setup.bat
              - ....
          - Config\
              - Settings.xml
          - ServiceManifest.xml
      ApplicationManifest.xml
      

      我希望这对某人有所帮助,但我会阅读Guest Executable文档,了解我错过的任何内容。 1

      策略

      有些东西需要在服务结构节点上获得精简权限,这就是为了让它运行.cmd,.bat,Python.exe等等你的服务。 以下编辑来自ApplicationManifest.xml

      ....
      <ServiceManifestImport>
          <ServiceManifestRef ServiceManifestName="MyGuestExecutablePkg" ServiceManifestVersion="1.0.0" />
          <ConfigOverrides />
          <Policies>
            <RunAsPolicy CodePackageRef="Code" UserRef="SetupAdminUser" EntryPointType="Setup" />
            <RunAsPolicy CodePackageRef="Code" UserRef="SetupAdminUser" EntryPointType="Main" />
          </Policies>
        </ServiceManifestImport>
      ....
      

      第一个策略是提升SetupEntryPoint,而第二个策略是复制EntryPoint,也就是说。你的服务。 确保在ApplicationManifest.xml的底部定义Principals。

      </DefaultServices>
        <Principals>
          <Users>
            <User Name="SetupAdminUser">
              <MemberOf>
                <SystemGroup Name="Administrators" />
              </MemberOf>
            </User>
          </Users>
        </Principals>
      </ApplicationManifest>
      

      最后的想法

      我作为Flask Api运行我的服务,因为这非常容易。所以“所有”Service Fabric会启动Flask API,然后确保它在崩溃时重新启动。 通过执行

      ,可以轻松测试和验证部署的哪个部分崩溃以及是否已启动并运行
      netstat -na | find "5000"
      

      在节点上验证api确实已启动并正在运行。

      毕竟,当然,您需要在Azure门户中为服务结构群集打开负载压缩器中的端口。

答案 1 :(得分:3)

对于Python,这应该没有任何不同,只要您通过脚本扩展(对于Azure)直接在节点上安装Python要求即可。或者将Python安装程序称为SetupEntryPoint。