Я развернул группу контейнеров, в которой был только один контейнер, с политикой перезапуска «Никогда». Я хочу снова запустить этот контейнер, но с другими переменными среды. Я вижу способы сделать это в командлетах powershell и azure, но в Azure .net SDK не очень ясно, как этого можно добиться.
Есть ли у кого-нибудь указания о том, как этого можно добиться с помощью Fluent API? Это будет полезно для меня, так как образ не нужно снова тянуть, просто перезапустить экземпляр контейнера.
Если вы хотите снова запустить этот контейнер, это означает, что вам нужно обновить конфигурацию этой группы контейнеров, даже если вы хотите изменить только переменные среды. Узнайте больше о Контейнерах обновлений . Для экземпляра контейнера Azure обновление означает повторное создание. Для .NET вы можете использовать IWithEnvironmentVariables в Microsoft.Azure.Management.ContainerInstance.Fluent.ContainerGroup.Definition, чтобы установить переменные среды, а затем снова создать группу контейнеров.
Я не уверен, что вы сможете предотвратить повторное извлечение изображения при запуске контейнера. Я часто вижу, как ACI снова загружают образ при перезапуске, независимо от того, был ли тот же самый образ загружен ранее. Я думаю, это то, что на самом деле означает бессерверность;)
Из вашего вопроса не совсем понятно, чего вы пытаетесь достичь, и является ли перезапуск контейнера с переменными окружения лучшим способом сделать это.
Итак, не зная специфики, вот пара идей:
Если вы время от времени запускаете контейнер и просто хотите дать ему некоторые инструкции, вы можете рассмотреть возможность повторного развертывания контейнера из параметризованного шаблона ARM. Вы определенно можете передавать переменные среды через шаблон ARM.
Вы можете подключить общий файловый ресурс из учетной записи хранения Azure в контейнер и запустить скрипт, загружающий оттуда переменные. Вы загружаете данные для обработки в общую папку и запускаете контейнер.
Я использовал это для запуска произвольных (.NET) исполняемых файлов в универсальном контейнере, например, в целях тестирования.
Для более частых запусков вы можете поместить данные конфигурации в базу данных, очередь или большой двоичный объект и обработать их из контейнера. Большие двоичные объекты и очереди можно легко привязать к функциям Azure, чтобы вы могли иметь функцию, которая автоматически запускает ваш контейнер, когда есть работа, которую нужно обработать.
Судя по вашему вопросу, я предполагаю, что вы ищете какой-то код .NET, чтобы это осуществить. Кажется, в SDK управления есть некоторая поддержка, но мне пока не удалось заставить это работать:
using System.Threading.Tasks;
using Microsoft.Azure.Management.ContainerInstance.Fluent;
using Microsoft.Azure.Management.ContainerInstance.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;
// ...
public static async Task SetEnvAndStart(string varName, string customValue)
{
// connect to Azure
var credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(
Configuration.ClientId(),
Configuration.ClientSecret(),
Configuration.TenantId(),
AzureEnvironment.AzureGlobalCloud);
var azure = await Azure.Authenticate(credentials).WithDefaultSubscriptionAsync();
// Find your container group
var containerGroup = await azure.ContainerGroups.GetByIdAsync("<resource id>");
// Add the environment variable
containerGroup.Containers["mycontainer"].EnvironmentVariables.Add(new EnvironmentVariable(varName, customValue));
// Apply the changes
await containerGroup.Update().ApplyAsync();
// Restart the container
await ContainerGroupsOperationsExtensions.StartAsync(containerGroup.Manager.Inner.ContainerGroups, containerGroup.ResourceGroupName, containerGroup.Name);
}
Если вы действительно хотите использовать переменные среды, я думаю, вам лучше всего воссоздать контейнер. Вы можете найти некоторый пример кода пакета SDK управления Azure полезным.
спасибо ... это то, что я тоже пробовал, но пока не смог заставить его работать, а документации мало. Я хотел повторно запустить контейнер в группе контейнеров без повторного извлечения контейнера, и, похоже, в настоящее время нет способа сделать это (функция в процессе), поэтому, даже если это работает, ACI не кэширует контейнер , и, следовательно, мой сценарий не работает...