チュートリアル:Resource Manager テンプレートを使用してマルチコンテナー グループをデプロイする
Azure Container Instances では、コンテナー グループを使用して、複数のコンテナーを 1 つのホストにデプロイできます。 コンテナー グループは、サービスが 2 つ目のアタッチされたプロセスを必要とする場合に、ログ記録、監視などの構成用にアプリケーション サイドカーを作成するときに便利です。
このチュートリアルでは、Azure CLI を使用して Azure Resource Manager テンプレートをデプロイすることで、2 コンテナー サイドカー構成を実行する手順を行います。 学習内容は次のとおりです。
- 複数コンテナー グループ テンプレートをデプロイする
- コンテナー グループをデプロイする
- コンテナーのログを表示する
Resource Manager テンプレートは、コンテナー グループを使用してさらに多くの Azure サービス リソース (Azure Files 共有や仮想ネットワークなど) をデプロイする必要があるシナリオに簡単に適応できます。
Note
複数コンテナー グループは、現在、Linux コンテナーに限定されています。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
テンプレートを構成する
まず、次の JSON を azuredeploy.json
という名前の新しいファイルにコピーします。 Azure Cloud Shell では、Visual Studio Code を使用して作業ディレクトリにファイルを作成できます。
code azuredeploy.json
この Resource Manager テンプレートでは、2 つのコンテナー、パブリック IP アドレス、公開された 2 つのポートを備えるコンテナー グループが定義されます。 グループの最初のコンテナーでは、インターネットに接続する Web アプリケーションが実行されます。 2 番目のコンテナーであるサイドカーは、グループのローカル ネットワーク経由でメインの Web アプリケーションに HTTP 要求を実行します。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": 80
},
{
"protocol": "tcp",
"port": 8080
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
プライベート コンテナー イメージ レジストリを使用するには、次の形式でオブジェクトを JSON ドキュメントに追加します。 この構成の実装例については、ACI Resource Manager テンプレートのリファレンスに関するドキュメントを参照してください。
"imageRegistryCredentials": [
{
"server": "[parameters('imageRegistryLoginServer')]",
"username": "[parameters('imageRegistryUsername')]",
"password": "[parameters('imageRegistryPassword')]"
}
]
テンプレートのデプロイ
az group create コマンドを使用して、リソース グループを作成します。
az group create --name myResourceGroup --location eastus
az deployment group create コマンドを使用してテンプレートをデプロイします。
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
数秒以内に、Azure から最初の応答を受信します。
デプロイ状態の表示
デプロイの状態を表示するには、次の az container show コマンドを使用します。
az container show --resource-group myResourceGroup --name myContainerGroup --output table
実行中のアプリケーションを表示するには、ご利用のブラウザーでその IP アドレスにアクセスします。 たとえば、次の出力例では IP は 52.168.26.124
です。
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- -------------------------------------------------------------------------------------------------- -------------------- --------- --------------- -------- ----------
myContainerGroup danlep0318r Running mcr.microsoft.com/azuredocs/aci-tutorial-sidecar,mcr.microsoft.com/azuredocs/aci-helloworld:latest 20.42.26.114:80,8080 Public 1.0 core/1.5 gb Linux eastus
コンテナー ログの表示
コンテナーのログ出力を表示するには、az container logs コマンドを使用します。 --container-name
引数は、プルするログが含まれるコンテナーを指定します。 この例では、aci-tutorial-app
コンテナーが指定されています。
az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-app
出力:
listening on port 80
::1 - - [02/Jul/2020:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
サイドカー コンテナーのログを表示するには、aci-tutorial-sidecar
コンテナーを指定して、同様のコマンドを実行します。
az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-sidecar
出力:
Every 3s: curl -I http://localhost 2020-07-02 20:36:41
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 1663 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Wed, 29 Nov 2017 06:40:40 GMT
ETag: W/"67f-16006818640"
Content-Type: text/html; charset=UTF-8
Content-Length: 1663
Date: Thu, 02 Jul 2020 20:36:41 GMT
Connection: keep-alive
このように、サイドカーは、グループのローカル ネットワーク経由でメインの Web アプリケーションに定期的に HTTP 要求を実行して、それが実行していることを確認します。 このサイドカーの例は、200 OK
以外の HTTP 応答コードを受け取ったときに、アラートをトリガーするように拡張できます。
次のステップ
このチュートリアルでは、Azure Resource Manager テンプレートを使用して、Azure Container Instances に複数コンテナー グループをデプロイしました。 以下の方法を学習しました。
- 複数コンテナー グループ テンプレートをデプロイする
- コンテナー グループをデプロイする
- コンテナーのログを表示する
その他のテンプレート サンプルについては、「Azure Container Instances のための Azure Resource Manager テンプレート」を参照してください。
YAML ファイルを使用してマルチコンテナー グループを指定することもできます。 YAML フォーマットは簡潔であるため、コンテナー インスタンスのみを含むデプロイには YAML ファイルを使用するデプロイをお勧めします。