Impostare le variabili di ambiente nelle istanze di contenitore
L'impostazione delle variabili di ambiente nelle istanze dei contenitori consente di offrire la configurazione dinamica dell'applicazione o dello script eseguiti dal contenitore. Questa funzionalità è simile all'argomento della riga di comando --env
per docker run
.
Per impostare le variabili di ambiente in un contenitore, specificarle quando si crea un'istanza del contenitore. Questo articolo mostra esempi di impostazione delle variabili di ambiente quando si avvia un contenitore con l'interfaccia della riga di comando di Azure, Azure PowerShell e il portale di Azure.
Se ad esempio si esegue l'immagine del contenitore Microsoft aci-wordcount, è possibile modificarne il comportamento specificando le variabili di ambiente seguenti:
NumWords: il numero di parole inviate a STDOUT.
MinLength: il numero minimo di caratteri in una parola perché venga contata. Un numero più alto ignora le parole comuni, ad esempio "di" e "il".
Se è necessario passare segreti come variabili di ambiente, Istanze di Azure Container supporta valori sicuri per i contenitori sia Windows che Linux.
Nota
È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.
Esempio di interfaccia della riga di comando di Azure
Per visualizzare l'output predefinito del contenitore aci-wordcount, eseguirlo prima con questo comando az container create (nessuna variabile di ambiente specificata):
az container create \
--resource-group myResourceGroup \
--name mycontainer1 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure
Per modificare l'output, avviare un secondo contenitore con l'argomento --environment-variables
aggiunto, specificando i valori per le variabili NumWords e MinLength. (In questo esempio si presuppone che l'interfaccia della riga di comando venga eseguita in una shell di Bash o in Azure Cloud Shell. Se si usa il prompt dei comandi di Windows, specificare le variabili con le virgolette doppie, ad esempio --environment-variables "NumWords"="5" "MinLength"="8"
.)
az container create \
--resource-group myResourceGroup \
--name mycontainer2 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure \
--environment-variables 'NumWords'='5' 'MinLength'='8'
Dopo che lo stato di entrambi i contenitori risulta terminato (usare az container show per controllare lo stato), visualizzarne i log con az container logs per verificare l'output.
az container logs --resource-group myResourceGroup --name mycontainer1
az container logs --resource-group myResourceGroup --name mycontainer2
L'output dei contenitori mostra come è stato modificato il comportamento di script del secondo contenitore impostando le variabili di ambiente.
mycontainer1
[('the', 990),
('and', 702),
('of', 628),
('to', 610),
('I', 544),
('you', 495),
('a', 453),
('my', 441),
('in', 399),
('HAMLET', 386)]
mycontainer2
[('CLAUDIUS', 120),
('POLONIUS', 113),
('GERTRUDE', 82),
('ROSENCRANTZ', 69),
('GUILDENSTERN', 54)]
Esempio di Azure PowerShell
L'impostazione delle variabili di ambiente in PowerShell è simile all'interfaccia della riga di comando, ma usa l'argomento della riga di comando -EnvironmentVariable
.
Avviare prima il contenitore aci-wordcount nella configurazione predefinita con questo comando New-AzContainerGroup:
New-AzContainerGroup `
-ResourceGroupName myResourceGroup `
-Name mycontainer1 `
-Image mcr.microsoft.com/azuredocs/aci-wordcount:latest
Eseguire ora il comando New-AzContainerGroup seguente. che specifica le variabili di ambiente NumWords e MinLength dopo avere popolato un variabile di matrice, envVars
:
$envVars = @(
New-AzContainerInstanceEnvironmentVariableObject -Name "NumWords" -Value "5"
New-AzContainerInstanceEnvironmentVariableObject -Name "MinLength" -Value "8"
)
$containerGroup = New-AzContainerGroup -ResourceGroupName "myResourceGroup" `
-Name "mycontainer2" `
-Image "mcr.microsoft.com/azuredocs/aci-wordcount:latest" `
-RestartPolicy "OnFailure" `
-Container @(
New-AzContainerGroupContainer -Name "mycontainer2" `
-EnvironmentVariable $envVars
)
Dopo che lo stato di entrambi i contenitori risulta terminato (usare Get-AzContainerInstanceLog per controllare lo stato), eseguire il pull dei log con il comando Get-AzContainerInstanceLog.
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
L'output di ogni contenitore mostra come si è modificato lo script eseguito dal contenitore impostando le variabili di ambiente.
PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
[('the', 990),
('and', 702),
('of', 628),
('to', 610),
('I', 544),
('you', 495),
('a', 453),
('my', 441),
('in', 399),
('HAMLET', 386)]
Azure:\
PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
[('CLAUDIUS', 120),
('POLONIUS', 113),
('GERTRUDE', 82),
('ROSENCRANTZ', 69),
('GUILDENSTERN', 54)]
Azure:\
Esempio del portale di Azure
Per impostare le variabili di ambiente quando si avvia un contenitore nel portale di Azure, specificarle nella pagina Avanzate quando si crea il contenitore.
- Nella pagina Avanzate impostare Criteri di riavvio su In caso di errore
- In Variabili di ambiente immettere
NumWords
con un valore di5
per la prima variabile e immettereMinLength
con un valore8
per la seconda variabile. - Selezionare Rivedi e crea per verificare e quindi distribuire il contenitore.
Per visualizzare i log del contenitore, in Impostazioni selezionare Contenitori e quindi Log. Analogamente all'output illustrato nelle sezioni precedenti sull'interfaccia della riga di comando e PowerShell, è possibile vedere come le variabili di ambiente modificano il comportamento dello script. Vengono visualizzate solo cinque parole, ognuna con una lunghezza minima di otto caratteri.
Valori sicuri
Gli oggetti con valori sicuri sono progettati per contenere informazioni riservate, ad esempio le password o le chiavi per le applicazioni. L'uso di valori sicuri per le variabili di ambiente è sia più sicuro che più flessibile rispetto all'inclusione nell'immagine del contenitore. Un'altra opzione consiste nell'usare volumi segreti, come descritto in Montare un volume segreto in Istanze di Azure Container.
Le variabili di ambiente con valori sicuri non sono visibili nelle proprietà del contenitore: i relativi valori sono accessibili solo dall'interno del contenitore. Ad esempio, le proprietà del contenitore visualizzate nel portale di Azure o nell'interfaccia della riga di comando di Azure mostrano solo il nome della variabile sicura e non il suo valore.
Impostare una variabile di ambiente sicura, specificando la proprietà secureValue
anziché il normale value
per il tipo di variabile. Le due variabili definite nel file YAML seguente illustrano i due tipi di variabili.
Distribuzione con file YAML
Creare un file secure-env.yaml
con il frammento seguente.
apiVersion: 2019-12-01
location: eastus
name: securetest
properties:
containers:
- name: mycontainer
properties:
environmentVariables:
- name: 'NOTSECRET'
value: 'my-exposed-value'
- name: 'SECRET'
secureValue: 'my-secret-value'
image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
ports: []
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
osType: Linux
restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups
Eseguire il comando seguente per distribuire il gruppo di contenitori con YAML (modificare il nome del gruppo di risorse in base alle esigenze):
az container create --resource-group myResourceGroup --file secure-env.yaml
Verificare le variabili di ambiente
Eseguire il comando az container show per eseguire query sulle variabili di ambiente del contenitore:
az container show --resource-group myResourceGroup --name securetest --query 'containers[].environmentVariables'
La risposta JSON mostra sia la chiave che il valore della variabile di ambiente non sicura, ma solo il nome della variabile di ambiente sicura:
[
[
{
"name": "NOTSECRET",
"secureValue": null,
"value": "my-exposed-value"
},
{
"name": "SECRET",
"secureValue": null,
"value": null
}
]
]
Con il comando az container exec, che abilita l'esecuzione di un comando in un contenitore in esecuzione, è possibile verificare che la variabile di ambiente sicura sia impostata. Eseguire il comando seguente per avviare una sessione bash interattiva nel contenitore:
az container exec --resource-group myResourceGroup --name securetest --exec-command "/bin/sh"
Dopo aver aperto una shell interattiva all'interno del contenitore, è possibile accedere al valore della variabile SECRET
:
root@caas-ef3ee231482549629ac8a40c0d3807fd-3881559887-5374l:/# echo $SECRET
my-secret-value
Passaggi successivi
Gli scenari basati su attività, ad esempio l'elaborazione batch di un set di dati di grandi dimensioni con diversi contenitori, possono trarre vantaggio dalle variabili di ambiente personalizzate in fase di esecuzione. Per altre informazioni sull'esecuzione di contenitori basati su attività, vedere Eseguire attività in contenitori con criteri di riavvio.