次の方法で共有


Go Web アプリを Azure Container Apps にデプロイする

このクイックスタートでは、コンテナー化された Go Web アプリを Azure Container Apps にデプロイする方法について説明します。

Azure Container Apps を使用すると、複雑なクラウド インフラストラクチャや複雑なコンテナー オーケストレーターを管理することなく、任意のコンテナーにパッケージ化されたアプリケーション コードを実行できます。 また、ランタイムまたはプログラミング モデルについて心配する必要がなくなります。 Azure Container Apps の一般的な用途には、API エンドポイントのデプロイ、バックグラウンド処理アプリケーションのホスト、イベントドリブン処理の取り扱い、マイクロサービスの実行があります。

このチュートリアルに従って、Docker イメージの構築、そのイメージの Azure Container Registry へのデプロイ、Azure Container Apps への Go Web アプリのデプロイの手順を確認します。

前提条件

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

セットアップ

CLI から Azure にサインインするには、az login コマンドを実行し、プロンプトに従って認証プロセスを完了します。

az login

az upgrade コマンドを実行して、最新バージョンの CLI を実行していることを確認します。

az upgrade

次に、CLI 用の Azure Container Apps 拡張機能をインストールまたは更新します。

Azure CLI で az containerapp コマンドを実行するときにパラメーターの不足に関するエラーが表示される場合は、最新バージョンの Azure Container Apps 拡張機能がインストールされていることを確認してください。

az extension add --name containerapp --upgrade

Note

2024 年 5 月以降、Azure CLI 拡張機能では、既定でプレビュー機能が有効になりません。 Container Apps のプレビュー機能にアクセスするには、--allow-preview true を使用して Container Apps 拡張機能をインストールします。

az extension add --name containerapp --upgrade --allow-preview true

現在の拡張機能またはモジュールがインストールされたら、 Microsoft.AppMicrosoft.ContainerRegistry、および Microsoft.OperationalInsights 名前空間を登録します。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.ContainerRegistry
az provider register --namespace Microsoft.OperationalInsights

Note

Microsoft.Web名前空間から Microsoft.App 名前空間に移行された Azure Container Apps リソース。 詳細については、 2022 年 3 月の Microsoft.Web から Microsoft.App への名前空間の移行に関するページを参照してください。

サンプル アプリ をダウンロードする

このチュートリアルを実行するには、コンテナー化するサンプル アプリケーションが必要です。 msdocs-go-webapp-quickstart GitHub リポジトリには、Go Web アプリのサンプルが用意されています。 サンプル アプリケーションをダウンロードするか、ローカル ワークステーションに複製します。

git clone https://github.com/Azure-Samples/msdocs-go-webapp-quickstart.git

cd msdocs-go-webapp-quickstart

Azure Container Registry を作成する

Azure Container Registry を使用すると、コンテナー イメージを構築、格納、管理できます。 これを使用して、前に説明したサンプル リポジトリに用意されているサンプル Go Web アプリを含む Docker イメージを格納します。

次のコマンドを実行して、Azure コンテナー レジストリを作成します。

  1. 作成するリソースの環境変数を設定します。 角かっこ内のプレースホルダー テキストを適切な値に置き換えます。 Azure Container Registry 名はグローバルに一意である必要があります。

    RESOURCE_GROUP_NAME="<resourceGroupName>"  # Name of the Azure resource group to create
    LOCATION="<location>"                      # Azure region (For example, "eastus", "westus2")
    ACR_NAME="<azureContainerRegistryName>"    # Globally unique name for Azure Container Registry
    

    環境変数を設定するためのコマンドの例は、Bash シェル用です。 別のシェルを使用している場合は、それに応じてコマンドを調整します。

  2. az group create コマンドで Azure リソース グループを作成します。

    az group create \
        --name $RESOURCE_GROUP_NAME \
        --location $LOCATION
    
  3. az acr create コマンドを使用して、Azure Container Registry を作成します。

    az acr create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $ACR_NAME \
        --sku basic
    
  4. az acr login コマンドを使用して Azure コンテナー インスタンスにサインインします。

    az acr login --name $ACR_NAME
    

    Note

    az acr login コマンドの実行時に次のようなエラーが発生した場合は、Docker デーモンがシステムで実行されていることを確認します。

    You may want to use 'az acr login -n $ACR_NAME --expose-token' to get an access token, which doesn't require Docker to be installed.
    An error occurred: DOCKER_COMMAND_ERROR
    

Docker イメージを構築してプッシュする

Azure Container Registry を作成したら、サンプルの Go Web アプリの Docker イメージをビルドしてプッシュします。

次のコマンドを実行して、イメージをビルドし、レジストリにプッシュします。

  1. 作成する Docker イメージの環境変数を設定します。 角かっこ内のプレースホルダー テキストを適切な値に置き換えます。

    IMAGE_NAME="go-webapp"  # Name for the Docker image
    

    環境変数を設定するためのコマンドの例は、Bash シェル用です。 別のシェルを使用している場合は、それに応じてコマンドを調整します。

  2. az acr show コマンドを使用してサインイン サーバー情報を取得し、環境変数に格納します。

    LOGIN_SERVER=$(az acr show \
        --name $ACR_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query loginServer \
        --output tsv)
    
    echo "Login server: $LOGIN_SERVER"
    
  3. Docker イメージをローカルでビルドします。

    docker build -t $LOGIN_SERVER/$IMAGE_NAME:latest .
    
  4. Docker イメージを Azure Container Registry にプッシュします。

    docker push $LOGIN_SERVER/$IMAGE_NAME:latest
    
  5. az acr repository list コマンドを使用して、イメージが Azure Container Registry に正常にプッシュされたことを確認します。

    az acr repository list \
        --name $ACR_NAME \
        --output table
    

Azure Container Registry でイメージを使用できるようになったので、Azure Container App とその環境をデプロイする準備ができました。

Azure Container Apps 環境を作成する

Azure Container Apps にはコンテナー オーケストレーターの複雑さはありませんが、セキュリティで保護された境界を確立するには何らかの方法が必要です。 Azure Container Apps 環境では、この機能が提供されます。 同じ環境にデプロイされたコンテナー アプリは、同じ仮想ネットワークを共有し、同じ Log Analytics ワークスペースにログを書き込みます。 Azure Container App をデプロイする前に、デプロイ先の環境が必要です。

  1. 作成するリソースの環境変数を設定します。 角かっこ内のプレースホルダー テキストを適切な値に置き換えます。

    CONTAINER_APP_ENV="mygoappenv"  # Name for the Container Apps environment
    CONTAINER_APP_NAME="mygoapp"    # Name for your container app
    

    環境変数を設定するためのコマンドの例は、Bash シェル用です。 別のシェルを使用している場合は、それに応じてコマンドを調整します。

  2. az containerapp env create コマンドを実行して、Azure Container Apps 環境を作成します。

    az containerapp env create \
        --name $CONTAINER_APP_ENV \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $LOCATION
    

Azure Container Apps をデプロイする

この時点で、次の手順を完了しました。

  • Azure Container Registry を作成しました。
  • Docker イメージをビルドしてレジストリにプッシュしました。
  • Azure Container Apps 環境を設定します。

最後の手順では、アプリケーションをデプロイします。

az containerapp create コマンドを実行して、Go Web アプリを Azure Container Apps にデプロイします。

az containerapp create \
    --name $CONTAINER_APP_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --environment $CONTAINER_APP_ENV \
    --image "$LOGIN_SERVER/$IMAGE_NAME:latest" \
    --registry-server "$LOGIN_SERVER" \
    --registry-identity system \
    --target-port 8080 \
    --ingress external

--registry-identity system パラメーターは、コンテナー アプリでシステム割り当てマネージド ID を構成します。 コンテナー アプリでは、コンテナー レジストリで認証するために、ユーザー名とパスワードではなく、セキュリティが低いこの ID が使用されます。 また、このコマンドは ID の AcrPull ロール の割り当てを自動的に作成し、レジストリからイメージをプルすることを承認します。 認証と承認にマネージド ID を使用するには、レジストリが Azure Container Registry である必要があります。

Web アプリの URL を確認する

  1. az containerapp show コマンドを実行して、Web アプリケーションのイングレスの FQDN (完全修飾ドメイン名) を取得します。

    APP_FQDN=$(az containerapp show \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query properties.configuration.ingress.fqdn \
        --output tsv)
    
    echo "App URL: https://$APP_FQDN"
    
  2. FQDN に対して curl コマンドを実行し、Web サイトの HTML が出力に反映されていることを確認します。 Web ブラウザーで URL を開いて Web アプリを操作することもできます。

    curl "https://$APP_FQDN"
    

    'このコマンドは、次のような Web アプリのホーム ページの HTML を返します。

    <!DOCTYPE html>
    <html>
    
    <head>
        <title>Hello Azure - Go Quickstart</title>
        <link rel="stylesheet" href="/assets/main.css">
        <link rel="icon" type="image/x-icon" href="/assets/favicon.ico">
    </head>
    
    <header>
        <h1>Welcome to Azure</h1>
    </header>
    
    <section>
        <img src="/assets/images/azure-icon.svg">
        <form method="post">
            <label for="form-label">Could you please tell me your name?</label><br>
            <input type="text" id="name" name="name" style="max-width: 256px;"><br>
            <button type="submit">Say Hello</button>
        </form>
    </section>
    
    </html>
    

リソースをクリーンアップする

サンプル アプリを使い終わったら、Azure からアプリのすべてのリソースを削除できます。 そうすることで、継続的な料金の発生を回避し、Azure サブスクリプションの整合性を維持できます。 リソース グループを削除して、リソース グループ内のすべてのリソースも削除することが、アプリのすべての Azure リソースを削除する最も簡単な方法です。

az group delete コマンドを実行して、リソース グループとそのすべてのリソースを削除します。

az group delete \
    --name $RESOURCE_GROUP_NAME \
    --no-wait

次のステップ