チュートリアル:Resource Manager テンプレートを使用してマルチコンテナー グループをデプロイするTutorial: Deploy a multi-container group using a Resource Manager template

Azure Container Instances では、コンテナー グループを使用して、複数のコンテナーを 1 つのホストにデプロイできます。Azure Container Instances supports the deployment of multiple containers onto a single host using a container group. コンテナー グループは、サービスが 2 番目の接続プロセスを必要とする場合に、ログ記録、監視などの構成用にアプリケーション サイドカーを作成するときに便利です。A container group is useful when building an application sidecar for logging, monitoring, or any other configuration where a service needs a second attached process.

このチュートリアルでは、Azure CLI を使用して Azure Resource Manager テンプレートをデプロイすることで、単純な 2 コンテナー サイドカー構成を実行する手順を行います。In this tutorial, you follow steps to run a simple two-container sidecar configuration by deploying an Azure Resource Manager template using the Azure CLI. 学習内容は次のとおりです。You learn how to:

  • 複数コンテナー グループ テンプレートをデプロイするConfigure a multi-container group template
  • コンテナー グループをデプロイするDeploy the container group
  • コンテナーのログを表示するView the logs of the containers

Resource Manager テンプレートは、追加の Azure サービス リソース (Azure Files 共有や仮想ネットワークなど) をコンテナー グループと共にデプロイする必要があるシナリオに合わせて簡単に適応させることができます。A Resource Manager template can be readily adapted for scenarios when you need to deploy additional Azure service resources (for example, an Azure Files share or a virtual network) with the container group.

注意

複数コンテナー グループは、現在、Linux コンテナーに限定されています。Multi-container groups are currently restricted to Linux containers.

Azure サブスクリプションがない場合は、開始する前に無料アカウントを作成してください。If you don’t have an Azure subscription, create a free account before you begin.

Azure Cloud Shell を使用するUse Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。You can use either Bash or PowerShell with Cloud Shell to work with Azure services. ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Azure Cloud Shell を開始するには:To start Azure Cloud Shell:

オプションOption 例とリンクExample/Link
コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. [使ってみる] を選択しても、コードは Cloud Shell に自動的にコピーされません。Selecting Try It doesn't automatically copy the code to Cloud Shell. Azure Cloud Shell の [使ってみる] の例
https://shell.azure.com に移動するか、 [Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. 新しいウィンドウで Cloud Shell を起動するLaunch Cloud Shell in a new window
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the top-right menu bar in the Azure portal. Azure Portal の [Cloud Shell] ボタン

Azure Cloud Shell でこの記事のコードを実行するには:To run the code in this article in Azure Cloud Shell:

  1. Cloud Shell を開始します。Start Cloud Shell.

  2. [コピー] ボタンを選択して、コード ブロックをコードにコピーします。Select the Copy button on a code block to copy the code.

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードを Cloud Shell セッションに貼り付けます。Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Enter キーを選択して、コードを実行します。Select Enter to run the code.

テンプレートを構成するConfigure a template

まず、次の JSON を azuredeploy.json という名前の新しいファイルにコピーします。Start by copying the following JSON into a new file named azuredeploy.json. Azure Cloud Shell では、Visual Studio Code を使用して作業ディレクトリにファイルを作成できます。In Azure Cloud Shell, you can use Visual Studio Code to create the file in your working directory:

code azuredeploy.json

この Resource Manager テンプレートでは、2 つのコンテナー、パブリック IP アドレス、公開された 2 つのポートを備えるコンテナー グループが定義されます。This Resource Manager template defines a container group with two containers, a public IP address, and two exposed ports. グループの最初のコンテナーでは、インターネットに接続する Web アプリケーションが実行されます。The first container in the group runs an internet-facing web application. 2 番目のコンテナーであるサイドカーは、グループのローカル ネットワーク経由でメインの Web アプリケーションに HTTP 要求を実行します。The second container, the sidecar, makes an HTTP request to the main web application via the group's local network.

{
  "$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": "2018-10-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 ドキュメントに追加します。To use a private container image registry, add an object to the JSON document with the following format. この構成の実装例については、ACI Resource Manager テンプレートのリファレンスに関するドキュメントを参照してください。For an example implementation of this configuration, see the ACI Resource Manager template reference documentation.

"imageRegistryCredentials": [
  {
    "server": "[parameters('imageRegistryLoginServer')]",
    "username": "[parameters('imageRegistryUsername')]",
    "password": "[parameters('imageRegistryPassword')]"
  }
]

テンプレートのデプロイDeploy the template

az group create コマンドでリソース グループを作成します。Create a resource group with the az group create command.

az group create --name myResourceGroup --location eastus

az group deployment create コマンドで、テンプレートをデプロイします。Deploy the template with the az group deployment create command.

az group deployment create --resource-group myResourceGroup --template-file azuredeploy.json

数秒以内に、Azure から最初の応答を受信します。Within a few seconds, you should receive an initial response from Azure.

デプロイ状態の表示View deployment state

デプロイの状態を表示するには、次の az container show コマンドを使用します。To view the state of the deployment, use the following az container show command:

az container show --resource-group myResourceGroup --name myContainerGroup --output table

実行中のアプリケーションを表示するには、ご利用のブラウザーでその IP アドレスにアクセスします。If you'd like to view the running application, navigate to its IP address in your browser. たとえば、次の出力例では IP は 52.168.26.124 です。For example, the IP is 52.168.26.124 in this example output:

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

コンテナー ログの表示View container logs

コンテナーのログ出力を表示するには、az container logs コマンドを使用します。View the log output of a container using the az container logs command. --container-name 引数は、プルするログが含まれるコンテナーを指定します。The --container-name argument specifies the container from which to pull logs. この例では、aci-tutorial-app コンテナーが指定されています。In this example, the aci-tutorial-app container is specified.

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-app

出力:Output:

listening on port 80
::1 - - [21/Mar/2019:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [21/Mar/2019:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [21/Mar/2019:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"

サイドカー コンテナーのログを表示するには、aci-tutorial-sidecar コンテナーを指定して、同様のコマンドを実行します。To see the logs for the sidecar container, run a similar command specifying the aci-tutorial-sidecar container.

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-sidecar

出力:Output:

Every 3s: curl -I http://localhost                          2019-03-21 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, 21 Mar 2019 20:36:41 GMT
Connection: keep-alive

このように、サイドカーは、グループのローカル ネットワーク経由で、メインの Web アプリケーションに定期的に HTTP 要求を実行して、アプリケーションが実行中であることを確認します。As you can see, the sidecar is periodically making an HTTP request to the main web application via the group's local network to ensure that it is running. このサイドカーの例は、200 OK 以外の HTTP 応答コードを受け取ったときに、アラートをトリガーするように拡張できます。This sidecar example could be expanded to trigger an alert if it received an HTTP response code other than 200 OK.

次の手順Next steps

このチュートリアルでは、Azure Resource Manager テンプレートを使用して、Azure Container Instances に複数コンテナー グループをデプロイしました。In this tutorial, you used an Azure Resource Manager template to deploy a multi-container group in Azure Container Instances. 以下の方法について学習しました。You learned how to:

  • 複数コンテナー グループ テンプレートをデプロイするConfigure a multi-container group template
  • コンテナー グループをデプロイするDeploy the container group
  • コンテナーのログを表示するView the logs of the containers

その他のテンプレート サンプルについては、「Azure Container Instances のための Azure Resource Manager テンプレート」を参照してください。For additional template samples, see Azure Resource Manager templates for Azure Container Instances.

YAML ファイルを使用してマルチコンテナー グループを指定することもできます。You can also specify a multi-container group using a YAML file. YAML フォーマットは簡潔であるため、コンテナー インスタンスのみを含むデプロイには YAML ファイルを使用するデプロイをお勧めします。Due to the YAML format's more concise nature, deployment with a YAML file is a good choice when your deployment includes only container instances.