次の方法で共有


チュートリアル: ソース コードからデプロイされたコンテナー アプリを更新する

この記事では、前の記事「ソース コードをビルドして Azure Container Apps にデプロイする」で作成したコンテナー アプリを更新する方法について説明します。

前の記事の手順を完了していない場合は、ここで中断し、すべての手順が完了したら、この記事に戻ってください。

このチュートリアルでは、次のことを行います。

  • アプリケーションにコードの変更を加えます。
  • 新しいタグを使用してコンテナー レジストリに変更をプッシュします。
  • 更新されたアプリをブラウザーで表示します。
  • ログ ストリームにクエリを実行して、ログに記録されたメッセージを表示します。

前提条件

このプロジェクトを完了するには、前のチュートリアル「ソース コードから Azure Container Apps へのビルドとデプロイ」で作成したツール、リソース、コンテナー アプリが必要です。

セットアップ

  1. 必要に応じて、CLI から Azure にサインインします。

    az login
    
  2. 環境変数を作成します。 最後のチュートリアルの環境変数がターミナルにまだ存在する場合は、この手順をスキップできます。

    環境変数を再作成する必要がある場合は、最初に前回の記事で作成したコンテナー レジストリ名にクエリを実行する必要があります。

    次のコマンドを実行して、最後のチュートリアルで作成したコンテナー レジストリにクエリを実行します。

    az acr list --query "[].{Name:name}" --output table
    

    コンテナー レジストリ名を取得したら、<REGISTRY_NAME> をレジストリ名に置き換えて、次のコマンドを実行します。

    RESOURCE_GROUP="my-demo-group"
    CONTAINER_APP_NAME="my-demo-app"
    REGISTRY_NAME="<REGISTRY_NAME>"
    
  3. ソース コードを更新して実行します。

    Startup.cs の内容を以下のコードに置き換えます。

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }
    
        public void Configure(IApplicationBuilder app, ILogger<Startup> logger)
        {
            app.UseRouting();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    logger.LogInformation("Hello Logger!");
                    await context.Response.WriteAsync("Hello Logger!");
                });
            });
        }
    }
    

    このバージョンのコードでは、コンソールと Container Apps ログ ストリームに情報を書き込むロガーが登録されます。

    リリース構成でプロジェクトをビルドします。

    dotnet build -c Release
    

    次に、アプリケーションを実行して、コードが正しく実装されていることを確認します。

    dotnet run --configuration Release
    

イメージをビルドしてレジストリにプッシュする

コードが更新されたので、最新バージョンを新しいイメージとしてコンテナー レジストリにプッシュできます。

レジストリに使用されるタグを一意なものにするには、次のコマンドを使用してタグ名を作成します。

IMAGE_TAG=$(date +%s)

次のコマンドを使用して、新しいコンテナー イメージをビルドしてレジストリにプッシュできるようになりました。

az acr build \
    -t $REGISTRY_NAME.azurecr.io/$CONTAINER_APP_NAME:$IMAGE_TAG \
    -r $REGISTRY_NAME .

新しいリビジョンを作成する

レジストリにプッシュした新しいコンテナー イメージに基づいて、コンテナー アプリの新しいリビジョンを作成できます。

az containerapp revision copy \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --image "$REGISTRY_NAME.azurecr.io/$CONTAINER_APP_NAME:$IMAGE_TAG" \
  --output none

revision copy コマンドは、レジストリから指定されたコンテナー イメージを使用して、コンテナー アプリの新しいリビジョンを作成します。

デプロイの確認

アプリケーションがデプロイされたので、このコマンドを使用して URL にクエリを実行できます。

az containerapp show \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --query properties.configuration.ingress.fqdn -o tsv

Web ブラウザーでアプリの URL に移動します。 コンテナー アプリを起動すると、Hello Logger! が出力されます。

クエリ ログ ストリーム

ブラウザーに送信された出力が表示されたので、次のコマンドを使用して、ログ ストリームに記録されているメッセージを確認できます。

az containerapp logs show \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --follow

クエリが実行されると、次のような応答が返されます。

{"TimeStamp", "xxxx", "Log": "info: Microsoft.Hosting.Lifetime[0]"}
{"TimeStamp", "xxxx", "Log": "Hosting environment: Production"}
{"TimeStamp", "xxxx", "Log": "info: Microsoft.Hosting.Lifetime[0]"}
{"TimeStamp", "xxxx", "Log": "Content root path: /app"}
{"TimeStamp", "xxxx", "Log": "info: Startup[0]"}
{"TimeStamp", "xxxx", "Log": "Hello Logger!""}

ストリーム内で Hello Logger! のメッセージがどのように表示されるかに注目してください。

ストリームのフォローを停止するには、Cmd/Ctrl + C を入力してメッセージを終了します。

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

このチュートリアルで作成した Azure リソースを使用しない場合は、次のコマンドを使用して削除できます。

az group delete --name my-demo-group

ヒント

問題がある場合は、 GitHub の Azure Container Apps リポジトリでイシューを開いて、お知らせください。

次のステップ

引き続き、Azure Container Apps でサービスに接続する方法について学習します。