演習 - 環境変数を設定する
環境変数を利用すると、コンテナーで実行するアプリケーションやスクリプトを動的に構成できます。 Azure CLI、PowerShell、または Azure portal を使用して、コンテナーを作成するときに変数を設定できます。 セキュリティで保護された環境変数を利用すると、機密情報をコンテナーの出力に表示しないようにできます。
Azure Cosmos DB インスタンスを作成し、環境変数を使用して接続情報を Azure コンテナー インスタンスに渡します。 コンテナー内のアプリケーションでは、変数を使用して Azure Cosmos DB のデータを読み書きします。 違いを確認できるように、環境変数とセキュリティで保護された環境変数の両方を作成します。
Azure Cosmos DB をデプロイする
Azure Cosmos DB をデプロイするとき、一意のデータベース名を指定します。 学習目的に、Cloud Shell でこのコマンドを実行し、一意の名前を保持する Bash 変数を作成してください。
COSMOS_DB_NAME=aci-cosmos-db-$RANDOM
この
az cosmosdb create
コマンドを実行し、Azure Cosmos DB インスタンスを作成します。COSMOS_DB_ENDPOINT=$(az cosmosdb create \ --resource-group learn-deploy-aci-rg \ --name $COSMOS_DB_NAME \ --query documentEndpoint \ --output tsv)
このコマンドが完了するまで数分かかることがあります。
$COSMOS_DB_NAME
によって一意のデータベース名が指定されます。 このコマンドによって、データベースのエンドポイント アドレスが出力されます。 ここで、コマンドによって、このアドレスが Bash 変数COSMOS_DB_ENDPOINT
に保存されます。az cosmosdb keys list
を実行し、Azure Cosmos DB 接続キーを取得し、それをCOSMOS_DB_MASTERKEY
という名前の Bash 変数に保存します。COSMOS_DB_MASTERKEY=$(az cosmosdb keys list \ --resource-group learn-deploy-aci-rg \ --name $COSMOS_DB_NAME \ --query primaryMasterKey \ --output tsv)
データベースと連動するコンテナーをデプロイする
Azure Cosmos DB インスタンスとの間でレコードを読み書きできる Azure コンテナー インスタンスを作成します。
最後の部分で作成した 2 つの環境変数、COSMOS_DB_ENDPOINT
と COSMOS_DB_MASTERKEY
は、Azure Cosmos DB インスタンスに接続するために必要な値を保持します。
次の
az container create
コマンドを実行してコンテナーを作成します。az container create \ --resource-group learn-deploy-aci-rg \ --name aci-demo \ --image mcr.microsoft.com/azuredocs/azure-vote-front:cosmosdb \ --ip-address Public \ --location eastus \ --environment-variables \ COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \ COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
azuredocs/azure-vote-front:cosmosdb は、架空の投票アプリを実行するコンテナー イメージを参照します。
--environment-variables
引数に注意してください。 この引数によって、コンテナーの起動時にコンテナーに渡される環境変数が指定されます。 その環境変数を探すようにコンテナー イメージは構成されています。 Azure Cosmos DB エンドポイントとその接続キーの名前を渡します。az container show
コマンドを実行し、コンテナーのパブリック IP アドレスを取得します。az container show \ --resource-group learn-deploy-aci-rg \ --name aci-demo \ --query ipAddress.ip \ --output tsv
ブラウザーで、コンテナーの IP アドレスに移動します。
重要
コンテナーが完全に起動し、接続を受信できるようになるまで 1 分から 2 分かかる場合があります。 ブラウザー内で IP アドレスに移動しても応答がない場合は、しばらく待ってからページを更新します。
アプリが利用可能になると、このページが表示されます。
猫または犬に投票してみてください。 各投票は Azure Cosmos DB インスタンスに格納されます。
セキュリティで保護された環境変数を使用し、接続情報を非表示にする
前のセクションでは、コンテナーを作成するのに 2 つの環境変数を使用しました。 既定では、これらの環境変数には Azure portal とコマンド ライン ツールからプレーン テキストでアクセスできます。
このセクションでは、接続キーなどの機密情報がプレーンテキストで表示されないようにする方法について学習します。
現在の動作を確認することから始めましょう。 次の
az container show
コマンドを実行し、コンテナーの環境変数を表示します。az container show \ --resource-group learn-deploy-aci-rg \ --name aci-demo \ --query containers[0].environmentVariables
両方の値がプレーンテキストで出力されます。 次に例を示します。
[ { "name": "COSMOS_DB_ENDPOINT", "secureValue": null, "value": "https://aci-cosmos.documents.azure.com:443/" }, { "name": "COSMOS_DB_MASTERKEY", "secureValue": null, "value": "abcdefghijklmnopqrztuvwxyz0123456789==" } ]
これらの値は投票アプリケーションではユーザーに表示されませんが、接続キーなどの機密情報は、セキュリティ上習慣的にプレーン テキストでは格納しないことが大切です。
セキュリティで保護された環境変数を使用するとクリア テキストで出力されなくなります。 セキュリティで保護された環境変数を使用するには、
--environment-variables
引数ではなく--secure-environment-variables
引数を使用します。次のコマンドを実行し、セキュリティで保護された環境変数を使用する aci-demo-secure という名前の 2 番目のコンテナーを作成します。
az container create \ --resource-group learn-deploy-aci-rg \ --name aci-demo-secure \ --image mcr.microsoft.com/azuredocs/azure-vote-front:cosmosdb \ --ip-address Public \ --location eastus \ --secure-environment-variables \ COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \ COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
--secure-environment-variables
引数を使用することに注意してください。次の
az container show
コマンドを実行し、コンテナーの環境変数を表示します。az container show \ --resource-group learn-deploy-aci-rg \ --name aci-demo-secure \ --query containers[0].environmentVariables
今回は、環境変数がプレーンテキストで表示されないことがわかります。
[ { "name": "COSMOS_DB_ENDPOINT", "secureValue": null, "value": null }, { "name": "COSMOS_DB_MASTERKEY", "secureValue": null, "value": null } ]
実際のところ、環境変数の値はまったく表示されません。 それで問題ありません。これらの値は、秘匿性の高い情報を参照するためです。 ここでは、環境変数が存在することがわかれば十分です。