动态传递环境变量到Azure容器实例

问题描述 投票:0回答:2

我有一个简单的 bash 脚本,它创建一个容器并在其中运行任务:

api=${1}

az container create \
--resource-group "my_resource_group" \
--file container.yaml \
--environment-variables "APIKEY"="${api}"

但是变量 APIKEY 永远不会从此调用中获取值,而是始终从 container.yaml 中的“默认”值获取值。

如何使用 .yaml 中的整个定义创建容器实例并在命令中传递环境变量

az container create

azure environment-variables azure-container-instances
2个回答
2
投票

当输入作为文件给出时,不考虑环境变量。

查看cli源码,当使用File时,它只会返回基于文件创建容器。 https://github.com/Azure/azure-cli/blob/713061e3e4a0fc969b0797ec06bd0e3db49ad4a8/src/azure-cli/azure/cli/command_modules/container/custom.py#L112

您可以做的是,在bash脚本中使用sed更改container.yaml文件中的APIKey值,然后按原样部署它。

sed -i 's/PLACEHOLDER_FOR_APIKEY_HERE/$api/g' container.yaml

PLACEHOLDER_FOR_APIKEY_HERE 将替换为命令行参数,container.yaml 文件将更新。

因此脚本将类似于下面的脚本。

api=${1}
sed -i 's/PLACEHOLDER_FOR_APIKEY_HERE/$api/g' container.yaml
az container create \
--resource-group "my_resource_group" \
--file container.yaml

0
投票

您可以借助 ArmClient 动态创建容器,并且在创建容器时也可以传递动态变量 var req = new ContainerResourceRequestsContent(1.0, 1.0); var containerResourceRequirements = new ContainerResourceRequirements(req);

//Defining container name within the container group along with environment variables
var ExportContainer = new ContainerInstanceContainer($"<Container Name>", "<Container Registry Name>.azurecr.io/<Image Name>", containerResourceRequirements);

ExportContainer.EnvironmentVariables.Add(new ContainerEnvironmentVariable("<Dynamic Environment Variable Name>") { Value = "<Dynamic Value>" });

var containers = new List<ContainerInstanceContainer> { ExportContainer };

var data = new ContainerGroupData(AzureLocation.CentralIndia, containers, ContainerInstanceOperatingSystemType.Linux);
data.RestartPolicy = "OnFailure";

var imageRegistryCredential = new ContainerGroupImageRegistryCredential(@"<Container Registry Name>.azurecr.io")
{
    Password = clientSecret,
    Username = clientId
};
data.ImageRegistryCredentials.Add(imageRegistryCredential);
string containerGroupName = $"<Container Group Name>";

var result = await containerGroupCollection.CreateOrUpdateAsync(WaitUntil.Completed, containerGroupName, data);
var containerGroup = await containerGroupCollection.GetAsync(containerGroupName).ConfigureAwait(true);
var containerToRemove = containerGroup.Value.Delete(WaitUntil.Completed);
© www.soinside.com 2019 - 2024. All rights reserved.