我有以下代码来停止Azure容器实例,并希望使用类似的代码来启动它。
using Microsoft.Azure.Management.Compute.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal("XXXX", "XXXX", "XXXX", AzureEnvironment.AzureGlobalCloud);
var azure = Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(credentials)
.WithSubscription("XXXXX");
var containerName = "mycontainer";
var containerGroup = azure.ContainerGroups.GetByResourceGroup("myResourceGroup", containerName);
if (containerGroup.State == "Running")
{
containerGroup.Stop();
}
我想做同样的事情并启动我的azure容器实例。那么containerGroup.Start()在哪里? ?界面中似乎不存在此文件。我已经尝试使用containerGroup.Restart();但这在停止状态下不起作用。我需要能够从C#代码中执行此操作,并且在可能的情况下希望避免使用powershell。
答案 0 :(得分:1)
不幸的是,当您停止容器实例时,它们将处于“已终止”状态,您无法再次启动它们。
已终止或已删除的容器组无法更新。一旦 容器组已停止(处于“已终止”状态)或已 删除后,该组将被部署为新组。
即使您更新了ACI,也意味着将重新部署ACI。您可以查看Update containers in Azure Container Instances。此外,当容器实例处于运行状态时,“重新启动”操作也将起作用。
因此,至少在现在,C#SDK中没有为您提供启动功能。希望对您有帮助。
更新
看看事件:
每次停止后启动容器组时,容器组始终执行以下步骤:拉出映像->创建容器组->启动容器实例。很明显,停止后启动容器组时,容器组已重新创建。
答案 1 :(得分:0)
有一种方法可以做到这一点,但它不会在流畅的API中公开:
using Microsoft.Azure.Management.ContainerInstance.Fluent;
// azure is an instance of IAzure; the fluent Azure API
var resources = await azure.ContainerGroups.ListAsync();
foreach(var containerGroup in resources.Where(aci => aci.State != "Running"))
{
await ContainerGroupsOperationsExtensions.StartAsync(
containerGroup.Manager.Inner.ContainerGroups,
containerGroup.ResourceGroupName,
containerGroup.Name);
}
正如其他人所提到的,您确实需要意识到这实际上是在启动一个新的容器。除非您在mounted volume之类的其他地方坚持使用该状态,否则上次运行将不会保持任何状态。
您还需要向执行此代码的人授予适当的权利。我正在使用一个函数,因此我必须设置一个服务帐户和一个角色,此blog post具有所有详细信息。
更新 我正在使用的代码在GitHub上:https://github.com/alanta/azure_scheduler/blob/master/src/StartACIs.cs