Container Instances で環境変数を設定すると、コンテナーによって実行されるアプリケーションまたはスクリプトの動的な構成を提供できます。 この機能は、docker runの--envコマンドライン引数に似ています。
コンテナーに環境変数を設定するには、コンテナー インスタンスの作成時に環境変数を指定します。 この記事では、Azure CLI、Azure PowerShell、および Azureportal を使用してコンテナーを開始するときに環境変数を設定する例を示します。
たとえば、Microsoft aci-wordcount コンテナー イメージを実行する場合は、次の環境変数を指定して動作を変更できます。
NumWords: STDOUT に送信された単語の数。
MinLength: カウントする単語の最小文字数。 数値を大きくすると、"of" や "the" などの一般的な単語が無視されます。
Von Bedeutung
シークレットを環境変数として渡す必要がある場合、Azure Container Instances では Windows コンテナーと Linux コンテナーの両方の セキュリティで保護された値 がサポートされます。
注
Azure Az PowerShell モジュールを使用して Azure と対話することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「Azure PowerShell を AzureRM から Azに移行する」を参照してください。
Azure CLI の例
aci-wordcount コンテナーの既定の出力を表示するには、まず、次の az container create コマンドを使用して実行します (環境変数は指定されていません)。
az container create \
--resource-group myResourceGroup \
--name mycontainer1 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure
出力を変更するには、numWords 変数と MinLength 変数の値を指定して、--environment-variables引数を追加して 2 つ目のコンテナーを開始します。 (この例では、Bash シェルまたは Azure Cloud Shell で CLI を実行することを前提としています。Windows コマンド プロンプトを使用する場合は、変数を二重引用符で囲んで指定します ( --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'
両方のコンテナーの状態が [終了] と表示されたら ( az container show を使用して状態を確認します)、 az container logs を使用してログを表示して出力を確認します。
az container logs --resource-group myResourceGroup --name mycontainer1
az container logs --resource-group myResourceGroup --name mycontainer2
コンテナーの出力は、環境変数を設定して 2 番目のコンテナーのスクリプト動作を変更した方法を示しています。
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)]
Azure PowerShell の例
PowerShell での環境変数の設定は CLI に似ていますが、 -EnvironmentVariable コマンドライン引数を使用します。
まず、次の New-AzContainerGroup コマンドを使用して、既定の構成で aci-wordcount コンテナーを起動します。
New-AzContainerGroup `
-ResourceGroupName myResourceGroup `
-Name mycontainer1 `
-Image mcr.microsoft.com/azuredocs/aci-wordcount:latest
次に、次の New-AzContainerGroup コマンドを 実行します。 これは、配列変数に値を設定した後の NumWords 環境変数と MinLength 環境変数を指定 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-AzContainerInstanceContainer -Name "mycontainer2" `
-EnvironmentVariable $envVars
)
両方のコンテナーの状態が 終了 したら ( Get-AzContainerInstanceLog を使用して状態を確認します)、 Get-AzContainerInstanceLog コマンドを使用してログをプルします。
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1
Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
各コンテナーの出力は、環境変数を設定してコンテナーによって実行されるスクリプトを変更した方法を示しています。
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:\
Azure portal の例
Azure portal でコンテナーを開始するときに環境変数を設定するには、コンテナーの作成時に [詳細設定 ] ページで環境変数を指定します。
- [詳細設定] ページで、[再起動ポリシー] を [失敗時] に設定します
- [環境変数] で、最初の変数に
5の値を持つNumWordsを入力し、2 つ目の変数に8の値を持つMinLengthを入力します。 - [ 確認と作成 ] を選択して確認し、コンテナーをデプロイします。
コンテナーのログを表示するには、[ 設定] で [ コンテナー] を選択し、[ ログ] を選択します。 前の CLI および PowerShell セクションで示した出力と同様に、環境変数によってスクリプトの動作がどのように変化するかを確認できます。 表示される単語は 5 つだけで、それぞれ最小長は 8 文字です。
セキュリティで保護された値
セキュリティで保護された値を持つオブジェクトは、アプリケーションのパスワードやキーなどの機微な情報を保持することを目的としています。 セキュリティで保護された値をコンテナーのイメージではなく環境変数に使用することで、より安全性と柔軟性を確保できます。 もう 1 つのオプションは、「 Azure Container Instances でのシークレット ボリュームのマウント」で説明されているシークレット ボリュームを使用することです。
セキュリティで保護された値を持つ環境変数は、コンテナーのプロパティには表示されません。その値には、コンテナー内からのみアクセスできます。 たとえば Azure portal や Azure CLI からコンテナーのプロパティを表示すると、セキュリティで保護された変数の名前だけが表示され、その値は表示されません。
セキュリティで保護された環境変数は、変数の型に通常の secureValue の代わりに value プロパティを指定することで設定します。 次の YAML で定義されている 2 つの変数は、2 つの変数の型を示します。
YAML デプロイ
次のスニペットを使用して secure-env.yaml ファイルを作成します。
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
次のコマンドを実行して、YAML を使用してコンテナー グループをデプロイします (必要に応じてリソース グループ名を調整します)。
az container create --resource-group myResourceGroup --file secure-env.yaml
環境変数を確認する
az container show コマンドを実行して、コンテナーの環境変数に対してクエリを実行します。
az container show --resource-group myResourceGroup --name securetest --query 'containers[].environmentVariables'
JSON 応答には、セキュリティで保護されていない環境変数のキーと値の両方が表示されますが、セキュリティで保護された環境変数の名前のみが表示されます。
[
[
{
"name": "NOTSECRET",
"secureValue": null,
"value": "my-exposed-value"
},
{
"name": "SECRET",
"secureValue": null,
"value": null
}
]
]
実行中のコンテナーでコマンドを実行できるようにする az container exec コマンドを使用すると、セキュリティで保護された環境変数が設定されていることを確認できます。 次のコマンドを実行して、コンテナーで対話型の bash セッションを開始します。
az container exec --resource-group myResourceGroup --name securetest --exec-command "/bin/sh"
コンテナー内で対話型シェルを開くと、 SECRET 変数の値にアクセスできます。
root@caas-ef3ee231482549629ac8a40c0d3807fd-3881559887-5374l:/# echo $SECRET
my-secret-value
次のステップ
タスクベースのシナリオ (複数のコンテナーを含む大規模なデータセットをバッチ処理するなど) は、実行時にカスタム環境変数を利用できます。 タスク ベースのコンテナーの実行に関する詳細については、「再起動ポリシーによるコンテナー化タスクの実行」を参照してください。